在 VBA 中,不像在 python 中,我们不能直接“子集”一个数组。
我们只能通过将 i 和 j 指定在某些范围之间来循环感兴趣的索引,例如i 在第 1 行和第 2 行之间,j 在第 2 和第 3 列之间。当然,我们也可以直接按位置索引到数组中,例如arr(1)。
i 只是一个表示行索引的变量,j 是列索引。
或者,我们可以使用Index 来“切片”特定的行或列;我猜你可能会称之为子集,但从你的语法来看,我认为你正在以 python 的方式思考。
Application.WorksheetFunction.Index(array,n, 0) 会将行 n 切出数组
Application.WorksheetFunction.Index(array, 0, n) 将列n 切出数组
Option Explicit
Public Sub ArrayStuff()
Dim arr(0 To 5) As Long, i As Long
For i = 0 To 5
arr(i) = i
Next
'Loop only required indices
For i = 2 To 3
Debug.Print arr(i)
Next
'Slice via Application.WorksheetFunction.Index
Dim arr2(0 To 2, 0 To 2) As Long, j As Long, counter As Long
For i = LBound(arr2, 1) To UBound(arr2, 1) '<== here can specify particular rows
For j = LBound(arr2, 2) To UBound(arr2, 2) '<== here can specify particular columns
counter = counter + 1
arr2(i, j) = counter
Next
Next
MsgBox Join(Application.WorksheetFunction.Transpose(Application.WorksheetFunction.Index(arr2, 0, 1)), ",") 'slice a column out
MsgBox Join(Application.WorksheetFunction.Index(arr2, 1, 0), ",") 'slice a row out
MsgBox Join(Application.WorksheetFunction.Index(arr2, 2, 0), ",") 'slice a row out
End Sub