multidimensional array中的参考区域

我有这些在Excel中的multidimensional array

Dim world(192,15,40) as Variant

Dim country(192,15) as Variant

我找不到把全国插入世界的办法。 就像是:

world()()(2)=country

要么

country(:,:,20)=currentSheet.Range("A1:F50")

或者只是引用一个区域以将其重新插入到表格中

Range.value=world(20:50,1:50,2)

这可能吗?

谢谢。

VBA Variant是非常灵活的,你可以用它来做你想做的,但不是做你正在问的东西。 他们的关键是沟三维数组,而是使用包含其他数组的数组。

我可能正在重新排列你的索引的含义,但考虑一下这样的事情:

 Dim china china = [china!Q42:X99] Dim india india = [india!Q42:X99] ... Dim world(1 to 242) world(1) = china world(2) = india ... [report!Q42:X99] = world(42) 

这个例子使用Variant的一维数组,其中的每个元素都是来自各种Excel范围的Variant的二维数组。 如果你可以把三维数组看作一个立方体,把这个结构想象成(1-D)(2-D)页的书。

通常,只使用数组(嵌套或其他)混淆数据可能充满危险。 但是,在支持Excel电子表格的VBA代码中,它通常是最自然的做事方式。 可以在VBA中定义Type s和Type es,但很多时候这是过度的,因为数据源和计算的最终结果都是工作表上的二维范围。

这里有一些相关的我的相关问题早些时候的答案:

VBA粘贴3维数组成表单

在Excel 2007 VBA中如何“ReDim保留”二维数组,以便我可以添加行而不是列到数组?

我不确定你想要达到什么目的,所以不能纠正你的语法。 我希望以下给出足够的背景让你纠正你的代码。

如果你写:

 Dim X as Variant X = .Range("A1").Value 

那么X将是一个单一的值。

如果你写:

 Dim X as Variant X = .Range("A1:F50").Value 

那么X将是一个二维数组(1到50,1到6)。 这是第一维是行,第二维是列。 这是正常的做法相反,但匹配.Cells(Row,Column)

你也可以写:

 Dim X(1 to 192) as Variant X(2) = .Range("A1:F50").Value 

请参阅我的Excelmacros加载数组的答案,了解有关锯齿状数组的更多信息。

我不认为有一个可以用来完成这个任务的命令。 我知道的最好的方法是循环你想要复制的维度:

 For i = LBound(country, 1) to UBound(country, 1) For j = LBound(country, 2) to UBound(country, 2) world(i, j, 2) = country(i, j) Next j Next i 

使用LBound和UBound将确保您从数组的每个维度获取所有数据。