Microsoft网站建议使用以下代码:
Dim numbers = {{1, 2}, {3, 4}, {5, 6}}
A = Array(1, 2, 3, 4, 5)
Dim numbers = {{1, 2}, {3, 4}, {5, 6}}
A = Array(1, 2, 3, 4, 5)
您还可以使用简写格式,利用Evaluate
函数和静态数组。在下面的代码中,varData
被设置为[]
是Evaluate
函数的简写,而{...}
表达式表示一个静态数组。每一行用;
分隔,每个字段用,
分隔。它可以得到与simoco的代码相同的结果,但语法更接近于您最初的问题:
Sub ArrayShorthand()
Dim varData As Variant
Dim intCounter1 As Integer
Dim intCounter2 As Integer
' set the array
varData = [{1, 2, 3; 4, 5, 6; 7, 8, 9}]
' test
For intCounter1 = 1 To UBound(varData, 1)
For intCounter2 = 1 To UBound(varData, 2)
Debug.Print varData(intCounter1, intCounter2)
Next intCounter2
Next intCounter1
End Sub
varData(row, col)
表示法进行访问。 - ChaimG[...]
是 Excel 的一部分,而不是 Access,它是 Evaluate
方法的快捷方式。 - chris neilsenApplication.Index()
的替代方法来缩短数组的方法感兴趣。 - T.M.微软网站建议...
这个建议适用于VB.NET,但不适用VBA。
对于VBA,你走对了方向。你可以这样做:
Dim A as Variant
A = Array(Array(1, 2), Array(3, 4), Array(5, 6))
Application.Index()
的替代方案
在Dmitriv Pavliv使用嵌套数组的基础上(作为Robin Mackenzie简洁方法的替代方案),您可以进一步应用Application.Index()
在这个数组数组上(每个元素数量相同)- 请注意双零参数!:
Sub Get2DimArray()
Dim arr() As Variant
'a) build array of arrays (aka as jagged array)
arr = Array(Array(1, 2, 4), Array(4, 5, 6), Array(7, 8, 9))
'b) make it 2-dimensional
arr = Application.Index(arr, 0, 0)
End Sub
结果为 一个 2 维数组(1 到 3,1 到 3),其中
* Row 1 ~> 1|2|4
* Row 2 ~> 4|5|6
* Row 3 ~> 7|8|9
相关链接
关于 Application.Index() 函数的一些特殊情况 的进一步阅读
Dim MyArray(X, X) As Integer
MyArray (0,0) = 1
MyArray (0,1) = 2
MyArray (1,0) = 3
MyArray (1,1) = 4
...
如果您想要更方便的方式来填充它,您可以使用For循环,如果您填充数字有固有逻辑的话。而且如此等等。如果在运行时才知道大小。
Dim nRows As Integer, nCols As Integer
...
Dim yourArray() As Integer
ReDim yourArray(1 to nRows, 1 to nCols) 'One base initialisation
'ReDim yourArray(0 to nRows - 1, 0 to nCols - 1) 'Zero base initialisation
然后你可以这样初始化(或访问)网格:
yourArray(1, 1) = ... 'set first cell