将电子表格中的许多(数千)行和 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 列,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
这完全等同于:
Dim arr(1 to 40000,1 to 3) As String
并用双循环填充数组。
我有一个 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 列,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
这完全等同于:
Dim arr(1 to 40000,1 to 3) As String
并用双循环填充数组。