首页 > 解决方案 > 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

错误:索引不属于选择

标签: arraysvbaindexing

解决方案


您正在加载一个包含两个单独的一维数组而不是单个二维数组的数组。这称为锯齿状阵列。

执行此操作时,您需要先记下大单维数组中的项位置,然后是第二个单维数组中的项位置,或 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

推荐阅读