从大型2D阵列切片小型2D阵列

时间:2019-04-04 13:10:37

标签: excel vba

在其他网站上学习后,我尝试使用以下代码从2D数组中提取一行或一列:

smallArray = Application.Index(LargeArray, RowA, 0) Or
smallArray = Application.Index(LargeArray, 0, ColA)

并使用以下代码从大型数组中提取几行或几列:

smallArray = Application.Index(LargeArray, Array(2,3,4), 0) Or
smallArray = Application.Index(LargeArray, 0, Array(2,3,4))

但是,当我使用这样的程序进行练习时:

Option Explicit
Sub RandomNumber() 'Generate 100 numbers
    Dim i As Integer, j As Integer
    For i = 1 To 10
        For j = 1 To 10
            Randomize
            Cells(i, j) = Int(Rnd * 1000)
        Next j
    Next i
End Sub
Sub Testing() 'Extract 2 Rows
    Dim TestingArray(1 To 10, 1 To 10)
    Dim TestingArray2()
    Dim arrayElement
    Dim i As Integer, j As Integer
    For i = 1 To 10
        For j = 1 To 10
            TestingArray(i, j) = Cells(i, j)
        Next j
    Next i
    TestingArray2 = Application.Index(TestingArray, Array(2, 3), 0)
    For Each arrayElement In TestingArray2
        Debug.Print arrayElement
    Next arrayElement
End Sub

我想将获得20个数字。

但是,仅获得两个数字。我应该如何编辑我的代码?请指教

1 个答案:

答案 0 :(得分:1)

您需要指定要返回的列。

例如,如果要全部使用10列,则可以执行以下操作:

TestingArray2 = Application.Index(TestingArray, Array(2, 3), Application.Transpose(Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)))

这将返回一个二维数组(2列x 10行),其中包含您要查找的20个值

如果您希望列列表是动态的,则可以预先定义一个数组,然后在Application.Index语句中使用它

Dim colArr(1 To 57, 1 To 1) As Integer
For i = 1 To 57
    colArr(i, 1) = i
Next i

TestingArray2 = Application.Index(TestingArray, Array(2, 3), colArr)