在其他网站上学习后,我尝试使用以下代码从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个数字。
但是,仅获得两个数字。我应该如何编辑我的代码?请指教
答案 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)