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将确保您从数组的每个维度获取所有数据。