【问题标题】:Difference between arr(x,x) and arr(x)(x)?VBA差异arr(x,x)和arr(x)(x)?
【发布时间】:2021-12-18 00:27:13
【问题描述】:

目前我需要以这种形式组装两个 excel 列

Redim arr (1 To 2, 1 To 7000)

example of the result I want

所以我就这样做了

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

错误:索引不属于选择

【问题讨论】:

    标签: arrays vba indexing


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2016-03-16
      • 1970-01-01
      • 2020-10-14
      • 2021-10-07
      • 1970-01-01
      • 1970-01-01
      • 2017-03-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多