能否使用VBA的Array()函数创建多维数组?
VBA中使用Array()函数创建多维数组的可能性
VBA的Array()函数无法直接创建真正的多维数组,你的理解是正确的。
关于Array()函数的实际行为
你尝试的第一种写法确实无效:
Dim MyArr() As Variant MyArr = Array(("1a","1b"),("2a","2b")) ' 此写法无效Array()函数仅接受一系列独立元素作为参数,无法识别这种直接的多维元素分组语法。第二种写法生成的是嵌套数组(Jagged Array),而非真正的多维数组:
MyArr = Array(Array("1a","1b"),Array("2a","2b")) ' 此写法有效,但生成嵌套数组嵌套数组是“数组的数组”,每个子数组可独立调整长度;而真正的多维数组(如
Dim arr(9,1))是连续的内存结构,各维度长度固定,二者在内存存储和访问逻辑上有本质区别。
VBA创建多维数组的常规方式
如果需要真正的多维数组,只能通过显式声明维度后逐个赋值:
Dim MyArr(9,1) As String MyArr(0,0) = "Hello" MyArr(0,1) = "world!" ' 后续元素赋值
也可以先声明动态数组,再用ReDim指定维度后赋值:
Dim MyArr() As String ReDim MyArr(1,1) ' 2行2列的二维数组 MyArr(0,0) = "1a" MyArr(0,1) = "1b" MyArr(1,0) = "2a" MyArr(1,1) = "2b"
与其他语言的对比
像.Net、Java这类语言支持的集合初始化式多维数组语法(如Dim MyArr() As String = {{"1a","1b"},{"2a","2b"}}),VBA确实没有提供,这是语言本身的语法限制。
内容的提问来源于stack exchange,提问作者spinjector
相关产品推荐
相关产品推荐

