我想用仅满足特定条件的行的行号填充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

10-07 14:24