我有个小问题,我想不出来。
有一长串的数字。我需要弄清楚哪些是免费的,哪些是免费的。

和照片一样,我需要它来找出女巫的数字。这些数字被放在另外12张纸上,所以我得把它们都搜一遍。
我需要这个来生成下一个免费的工具编号,不同的工具有不同的开始编号。
诚挚的问候。
希望有人能帮忙
Rcount = 0
Row = 2
Set ran = Sheets("Alle").Range("A2:A1600")
For Each cell In ran
FindString = Sheets("All").Cells(Row, 1).Value
'MsgBox ("Test: " & FindString)
If Trim(FindString) <> "" Then
For Each sh In ActiveWorkbook.Worksheets
With sh.Range("A:A")
Set Rng = .Find(What:=FindString, _
After:=.Cells(.Cells.Count), _
LookIn:=xlValues, _
LookAt:=xlWhole, _
SearchOrder:=xlByRows, _
SearchDirection:=xlNext, _
MatchCase:=False)
If Not Rng Is Nothing Then
MsgBox ("Row: " & Row)
Exit Sub
End If
End With
Next
End If
Row = Row + 1
Next cell已经尝试过这段代码,但只得到了第一行。所以我想是出了点问题。
发布于 2022-11-04 10:50:31
欢迎来到这里。
当你说用过的数字时,我理解你指的是相邻列是X(或其他FindString)的那些数字。
您可以创建一个包含所有行号的数组,其中0表示该行中没有FindString,如果行号是行号的话。
举个例子,我有4个工作表:

如果B列中有X,则我的代码只返回每个工作表中的行号:
Sub test()
Dim DataRows As Variant
Dim i As Long
Dim rngSource As Range
Dim FindString As String
Dim wk As Worksheet
For Each wk In Sheets(Array("Sheet1", "Sheet3", "Sheet4")) 'array of 12 sheets
'maybe you need to change parameters in each sheet. You can do it with Select Case
' I'm using the same parameters for all worksheets
FindString = """X""" 'so it saves the quotes too
Set rngSource = wk.Range("B1:B25")
DataRows = Evaluate("ROW(" & rngSource.Address(, , , True) & ")*(--(" & rngSource.Address(, , , True) & "=" & FindString & "))")
For i = LBound(DataRows) To UBound(DataRows) Step 1
If DataRows(i, 1) > 0 Then Debug.Print wk.Name, DataRows(i, 1), wk.Range("A" & DataRows(i, 1)).Value 'show only row numbers of used numbers and used numbers
Next i
Erase DataRows
Next wk
End Sub输出:

你只需要调整一些部件就能得到你想要的东西。
这里棘手的部分是这一行代码:
DataRows = Evaluate("ROW(" & rngSource.Address(, , , True) & ")*(--(" & rngSource.Address(, , , True) & "=" & FindString & "))")计算将评估一个函数,就像您在Excel中键入它一样,所以在第一个循环中,它将如下所示:
ROW(B1:B25)*(--(B1:25="X"))
这是一个很复杂的函数,它返回一个数字数组。(B1:25="X"),如果单元格等于或不等于X,它只是一个1和0的数组。然后将该数组乘以行号。如果单元格不是X,那么rownumber*0=0就意味着它是空的。在另一种情况下,使用的数字只有零和行号,所以rownumber*1=rownumber :)
然后将其保存到数组中(数组工作得更快),如果数组中的值不是0,则只获得输出。
顺便说一下,DataRows是一个二维数组,您需要代码中的索引行i和列索引(代码中总是有1)。
其余的代码很容易理解。
https://stackoverflow.com/questions/74313070
复制相似问题