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