在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()的其他用法的更多信息,请查看这篇文章。
你可以使用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一个元素。 他们将是空的,但他们在那里,所以你需要意识到这一点,特别是如果你打算通过它。