如何在EXCEL VBA中获取数组中的元素子集?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (637)

如何在excel vba中获取数组中的第3到第6个元素?像下面这样的东西。

    Dim x(9) as variant, y(3) as variant

    y(0:3) = x(2:5)
提问于
用户回答回答于

在VBA中,与python不同,例如,我们不能直接“子集”数组。

我们只能通过指定ij在某些边界之间来循环搜索感兴趣的索引,例如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

扫码关注云+社区

领取腾讯云代金券