我想用仅满足特定条件的行的行号填充VBA中的数组。我想要尽可能最快的方法(例如,RowArray = index(valRange=valMatch).row
)
下面是(慢速)范围循环的代码。
当前代码
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
关于arrays - 是否可以用符合特定条件的行号填充数组而不循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12921350/