我有一个包含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
答案 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
这恰好相当于:
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数组,其中第一个值是列引用,第二个值是行引用。
另外,正如评论中所指出的,您可以省略Transpose并执行此操作:
Sub test()
Dim foo2
foo2 = Sheet1.Range("A1:C3").Value
End Sub
两者都产生了类似的结果。