将电子表格中的许多(数千)行和3列加载到数组中

时间:2018-01-26 16:58:59

标签: arrays excel vba excel-2016

我有一个包含40K行和3列字符串的电子表格,我需要将其加载到数组中。如何加载数组,以便迭代工作表来加载值?然后结束目标是我填充数组,然后我可以通过数组并说这个值转到这个电子表格,该值在另一个电子表格中。我有一个2列的电子表格,但最新的扭曲有3列,并试图使我的2D版本适应3D错误。

ReDim arrTwoD(1 To intRows + 1, 1 To intCols + 1) 
For i = 1 To UBound(arrTwoD, 1)'really a 3D now. or at least it needs to be

  For j = 1 To UBound(arrTwoD, 2)
    For k = 1 To UBound(arrTwoD, 3)
    arrTwoD(i, j, k) = Sheets("ExistingLFItems").Cells(i, j, k)
    Debug.Print i, j, k, arrTwoD(i, j, k)
    Next k
  Next j
Next i

2 个答案:

答案 0 :(得分:1)

说我们有 3 列, A B C 数据来自 A1 C40000 。这将使用这些列的内容填充数组:

Sub RangeToArray()
    Dim arr() As Variant
    arr = Range("A1:C40000").Value
    MsgBox LBound(arr, 1) & "-" & LBound(arr, 2) & vbCrLf & UBound(arr, 1) & "-" & UBound(arr, 2)
End Sub

enter image description here

这恰好相当于:

Dim arr(1 to 40000,1 to 3) As String

并用双循环填充数组。

答案 1 :(得分:0)

无论你怎么努力,一张纸只是一个二维数组。您可以通过执行以下操作来简化代码:

Sub test()
Dim foo

     foo = Application.Transpose(Selection)

End Sub

显然,你需要改变选择'成为你的范围,但这应该让你开始。如果在End Sub上设置断点并查看foo是什么,您会注意到它是一个2D数组,其中第一个值是列引用,第二个值是行引用。

enter image description here

另外,正如评论中所指出的,您可以省略Transpose并执行此操作:

Sub test()
Dim foo2

     foo2 = Sheet1.Range("A1:C3").Value

End Sub

两者都产生了类似的结果。