在Excel VBA中预定义multidimensional array

我知道我们可以在Excel VBA中使用下面的定义单维数组

GroupCols = Array("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L") 

你怎么能以相同的方式预定义multidimensional array?

另外我想用下面的方式跟踪一定的水平

  Level[16][0] Level[16][1] Level[16][2] Level[8][0] Level[8][1] Level[8][2] Level[7][0] Level[7][1] Level[7][2] 

第一个指标定义的水平,因此可能不是连续的…像16后有直8等等。 对于每个我需要3个信息,这是0,1,2秒的指标。

任何人都可以指导我如何在Excel VBA中实现相同的?

像这样的数组中不能有非连续的索引。 如果只使用索引的非连续子集,那么所有其他元素将是空的,但是仍然占用存储空间,这既低效又容易出错( LaunchMissile = Levels(17,1)LaunchMissile = Levels(17,1) !) 。

你正在寻找的是Dictionary对象。 使用前,必须设置参考如下:工具>参考>检查微软脚本运行时。

例:

 Dim Levels As Scripting.Dictionary Set Levels = New Scripting.Dictionary ' Fill up the dictionary Levels.Add Key:=16, Item:=Array("A", "B", "C") Levels.Add Key:=8, Item:=Array("FAI", "CNT", "YES") Levels.Add Key:=7, Item:=Array("Once", "Twice", "Thrice") ' Retrieve items from the dictionary Debug.Print Levels.Item(8)(0) Debug.Print Levels.Item(8)(1) Debug.Print Levels.Item(8)(2) 

请注意,一个Collection对象也可以做到这一点。 优点:原生的VBA,所以不需要设置参考。 缺点:关键是只写,这可能相当尴尬。

有一种方法可以像使用array()一样使用evaluate()来定义2D数组:

 Sub Array2DWithEvaluate() Dim Array2D As Variant '[] ist a shorthand for evaluate() 'Arrays defined with evaluate start at 1 not 0 Array2D = [{"1,1","1,2","1,3";"2,1","2,2","2,3"}] Debug.Print Array2D(2, 2) '=> 2,2 End Sub 

如果你想用string来定义数组,你必须像这样使用它

 Sub Array2DWithEvaluateFromString() Dim strValues As String Dim Array2D As Variant strValues = "{""1,1"",""1,2"",""1,3"";""2,1"",""2,2"",""2,3""}" Array2D = Evaluate(strValues) Debug.Print Array2D(2, 2) '=> 2,2 End Sub 

如果你想了解关于函数Evaluate()的其他用法的更多信息,请查看这篇文章。

http://www.ozgrid.com/forum/showthread.php?t=52372

你可以使用Array(Array())作为例子

 data = Array(Array(1,2), Array(3,4)) 

要引用第一个元素,请使用data(0)(0)

( 从这里复制)

没有办法像使用array()函数一样声明和填充二维数组。 您可以使用ReDim来定义数组维度,然后填充它。 这是一个例子:

 ReDim myArray(0 To 16, 0 To 3) myArray(0, 0) = "A" myArray(0, 1) = "B" ... 

不幸的是,当你创build一个数组的时候,会为每个条目从下限到上限创build一个元素。 他们将是空的,但他们在那里,所以你需要意识到这一点,特别是如果你打算通过它。