我想用仅满足特定条件的行的行号填充VBA中的数组。我想要最快的方法(例如RowArray = index(valRange=valMatch).row
之类的东西)
以下是(慢速)范围循环的代码。
Current Code
Sub get_row_numbers()
Dim RowArray() As Long
Dim valRange As Range
Dim valMatch As String
Set valRange = ActiveSheet.Range("A1:A11")
valMatch = "aa"
ReDim RowArray(WorksheetFunction.CountIf(valRange, valMatch) - 1)
For Each c In valRange
If c.Value = valMatch Then RowArray(x) = c.Row: x = x + 1
Next c
End Sub
最佳答案
仍然是Chris高效变体阵列时间的2-3倍,但该技术功能强大,并且已超出了此问题的应用范围
需要注意的一点是Application.Transpose
限制为65536个单元,因此需要将更长的范围“分块”成碎片。
Sub GetEm()
Dim x
x = Filter(Application.Transpose(Application.Evaluate("=IF(A1:A50000=""aa"",ROW(A1:a50000),""x"")")), "x", False)
End Sub