用VBA中的二维数组填充3D数组

我有一组数据,其中每个项目都有与之对应的二维数组信息。 我想创build一个3D数组,其中第一个维度是项目名称,第二个维度和第三个维度由对应于该项目的信息占用。

我可以读取每个项目的数据到一个二维数组,但我不知道如何将二维数组读取到三维数组。

我知道所有维度的大小,所以我可以在开始读写过程之前创build一个固定大小的数组。

我想这样做只能通过项目的名称循环,而不是循环每个2D数组的每个单元格。

很容易将二维数组读入一个ArrayList,但是我希望能够命名这些项目,并且能够将这些项目读回到Excel中,而使用ArrayList似乎很困难。

问题是:如何从Excel中读取2Dselect到VBA中的3D固定大小数组?

以下是每种方法的示例:数组数组或数组DictionaryDictionary方法比数组更容易 ,如果你想要的是键值查找的值。 在其他情况下,数组可能是有优点的。

这是一个没有真正目的的虚拟代码,但是要展示一些东西:获取单个值和一组值。 我正在通过抓取一些简单和2D的Range数据来构build二维数组值。 从那里我build立这些值的数组,然后把它们放入相关的数据结构。 然后我捅了一下数据结构,从中得到了一些值。

显示arrays的方法首先显示(和图片左侧的输出)。

 Sub ArraysOfArrays() Dim arrA() As Variant Dim arrB() As Variant 'wire up a 2-D array arrA = Range("B2:D4").Value arrB = Range("F2:H4").Value Dim arrCombo() As Variant ReDim arrCombo(2, 1) As Variant 'name and give data arrCombo(0, 0) = "arrA" arrCombo(1, 0) = arrA 'add more elements ReDim Preserve arrCombo(2, 2) arrCombo(0, 1) = "arrB" arrCombo(1, 1) = arrB 'output a single result 'cell(2,2) of arrA Range("B6") = arrCombo(1, 0)(2, 2) Dim str_search As String str_search = "arrB" 'iterate through and output arrB to cells Dim i As Integer For i = LBound(arrCombo, 1) To UBound(arrCombo, 1) If arrCombo(0, i) = str_search Then Range("B8").Resize(3, 3).Value = arrCombo(1, i) End If Next i End Sub 

夫妇关键点在这里:

  • 您只能使用ReDim来扩展数组。 ReDim非常特别,只有在使用Preserve时才更改数组的最后一个维度 。 因为我需要其中一个来跟踪条目的数量,所以我在第二个索引中这样做是不自然的。 如果你事先知道这个尺寸,那么这个痛苦的步骤就会被跳过。
  • 我的最后一个数组是一个2xN数组,其中2包含一个名称和一个YxZ数据数组。
  • 为了在混合中find一个给定的数组,你必须遍历它们。

数组字典远不如代码更优雅。 确保将VBA编辑器中的参考Tools->References添加到Microsoft脚本运行时。

 Sub DictionaryOfArrays() Dim dict As New Scripting.Dictionary 'wire up a 2-D array arrA = Range("B2:D4").Value arrB = Range("F2:H4").Value dict.Add "arrA", arrA dict.Add "arrB", arrB 'get a single value Range("F6") = dict("arrB")(2, 2) 'get a array of values Range("F8").Resize(3, 3) = dict("arrA") End Sub 

input数据和结果的图片

数据和结果

要复制的数据(粘贴到B1

 ab 1 2 3 10 11 12 4 5 6 13 14 15 7 8 9 16 17 18