The*_*man 11 arrays excel vba excel-vba
我想在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
Run Code Online (Sandbox Code Playgroud)
bre*_*tdj 11
仍然是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
Run Code Online (Sandbox Code Playgroud)
首先将范围复制到变量数组,然后遍历数组
Arr = rngval
For I = 1 to ubound(arr)
If arr(I,1) = valMatch Then RowArray(x) = I: x = x + 1
Next
Run Code Online (Sandbox Code Playgroud)