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

Loading many (thousands) rows and 3 columns from a spreadsheet into an array

我有一个 spreadsheet,其中包含 40K 行和 3 列的字符串,我需要将它们加载到数组中。如何加载一个数组,以便遍历 sheet 来加载值?然后最终目标是我填充数组,这样我就可以遍历数组并说这个值进入这个 spreadsheet,那个值进入另一个 spreadsheet。我让它为 2 列的 spreadsheet 工作,但最新的变化是 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

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

Sub test()
Dim foo

     foo = Application.Transpose(Selection)

End Sub

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

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

Sub test()
Dim foo2

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

End Sub

两者产生相似的结果。

假设我们有 3 列,AB,和 C,数据从 A1C40000。这将用这些列的内容填充一个数组:

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

这完全等同于:

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

并用双循环填充数组。