arrays - VBA差异arr(x,x)和arr(x)(x)?
问题描述
目前我需要以这种形式组装两个 excel 列
Redim arr (1 To 2, 1 To 7000)
所以我就这样
Sub main()
Sheets("data").Activate
endRow = Cells(Rows.Count, 1).End(xlUp).Row
ReDim arr(1 To 2)
arr(1) = Application.Transpose(Range("A2:A" & endRow).value)
arr(2) = Application.Transpose(Range("H2:H" & endRow).value)
End Sub
但是当我这样做时,我得到了这种数组,我们可以像这样访问它 arr (x)(x) 而不是 arr (x, x),这两个数组有什么区别?以及如何获得数组 arr (x, x) ?下面的方法不起作用,这是我第一次看到这样的表格
Sub main()
Sheets("data").Activate
EndRow = Cells(Rows.Count, 1).End(xlUp).Row
ReDim arr(1 To 2, 1 To EndRow)
arr(1) = Application.Transpose(Range("A2:A" & EndRow).value)
arr(2) = Application.Transpose(Range("H2:H" & EndRow).value)
End Sub
错误:索引不属于选择
解决方案
您正在加载一个包含两个单独的一维数组而不是单个二维数组的数组。这称为锯齿状阵列。
执行此操作时,您需要先记下大单维数组中的项位置,然后是第二个单维数组中的项位置,或 arr(1)(1)。
第一个是说我想要位置 1 中的数组,第二个是位置 1 中该数组中的项目。
为了得到你想要的二维数组,我将从两个二维数组开始,然后循环放入第三个数组:
Sub main()
Dim endRow As Long
endRow = Worksheets("data").Cells(Rows.Count, 1).End(xlUp).Row
Dim aArr As Variant
aArr = Worksheets("data").Range("A2:A" & endRow).Value
Dim hArr As Variant
hArr = Worksheets("data").Range("H2:H" & endRow).Value
Dim arr As Variant
ReDim arr(1 To 2, 1 To UBound(aArr, 1))
Dim i As Long
For i = 1 To UBound(aArr, 1)
arr(1, i) = aArr(i, 1)
arr(2, i) = hArr(i, 1)
Next i
Debug.Print arr(1, 1)
End Sub