Arrays 如何返回多维数组的元素数组?

Arrays 如何返回多维数组的元素数组?,arrays,vba,join,multidimensional-array,Arrays,Vba,Join,Multidimensional Array,据我所知,VBA中的数组(特别是如果它是一种变体类型)可以或多或少地接受任何元素。一个很大的优点是数组本身可以是数组的元素,这使得包含“低”数组的“高”数组是多维的 ' Example Dim TestArray() As Variant Dim NestedArray1() As Variant Dim NestedArray2() As Variant NestedArray1 = Array(1, 2, 3) NestedArray2 = Array(4, 5, 6) TestArra

据我所知,VBA中的数组(特别是如果它是一种变体类型)可以或多或少地接受任何元素。一个很大的优点是数组本身可以是数组的元素,这使得包含“低”数组的“高”数组是多维的

' Example
Dim TestArray() As Variant
Dim NestedArray1() As Variant
Dim NestedArray2() As Variant

NestedArray1 = Array(1, 2, 3)
NestedArray2 = Array(4, 5, 6)

TestArray = Array(NestedArray1, NestedArray2)
结构清晰。 TestArray将有2个元素:NestedArray1、NestedArray2,它们本身是包含(1,2,3)和(4,5,6)的3个元素的数组。VBA编辑器中的“局部变量”窗口也正确列出了这些元素

但棘手的部分来了

如何整体访问“较低”阵列

通常访问数组元素是这样做的

ArrayName(n)         ' One-dimensional
ArrayName(n,m,...)   ' Multidimensional

TestArray(1,2)       ' Using the above Example will return 2
所以我想

TestArray(1)
返回Nestedaray1的等价项。TestArray(1)甚至与任何其他数组一样,在“局部变量”窗口中被列为类型为Variant的数组

不幸的是,这个方法是无效的

下面是一个具体的例子:

Join(TestArray(1), ", ")
Join(sourceArray,[separator])是一个内置函数,它要求数组和分隔符返回数组元素,分隔符位于元素之间

因此:

将作为字符串返回:

1, 2, 3
但是使用上面的例子:

Join(TestArray(1), ", ")
不幸的是,它不起作用

我知道Join()需要一维源数组,但将嵌套数组视为有效输入的不恰当性是语言本身的限制吗


是否有一个优雅的解决方案,还是必须始终解决通过嵌套数组的每个元素循环,创建一个临时的新元素并将其用作函数的输入?

您遇到了一个常见的新手对VBA中的变量的困惑

VBA中的变量可以保存数组。这与变体数组不同

考虑下面的代码

Public Sub TestArrayWithVariants()

    Dim myArray As Variant
    Dim myVariantArray(0 To 2) As Variant

    myArray = Split("Its,a,variant,containing, an,array", ",")
    ' The next line produces a Can't assign to array error
    myVariantArray = Split("Its,a,variant,containing, an,array", ",")

End Sub
产生混淆的原因是,对于一维数组,包含数组和变量数组的变量的语法没有明显的差异

e、 g

但是如果我们说

myArray(3)=Split("Its,a,variant,containing,an,array", ",")
然后在第二个数组的位置2打印“variant”将是

debug.Print myArray(3)(2)
这与将myVariantArray声明为多维数组不同

Dim myVariantArray(0 to 3,0 to 4)

myVariantArray(3,0)="Its"
myVariantArray(3,1)="an"
myVariantArray(3,2)"Array"
myVariantArray(3,3)"Containing"
myVariantArray(3,4)"Variants"
对于包含数组的变量,最好考虑第一个维度返回一个匿名数组,当我们索引到该匿名数组时,我们会得到索引中的任何项

myArray(2)(4)
变成

anonymous_array(4)
等等


如果您计划基于嵌套变体的数据结构,我强烈建议您使用嵌套集合。

您有一个数组数组,而不是二维数组。使用
TestArray(1)(2)
返回第一个数组中的第二个项。使用代码,
join(TestArray(0),“,”)“/code>给出
1,2,3
join(TestArray(1),”,“,”/code>给出
4,5,6
anonymous_array(4)