【问题标题】:Excel VBA How to populate a multi-dimensional (3d) array with values from multiple excel ranges?Excel VBA 如何使用来自多个 excel 范围的值填充多维(3d)数组?
【发布时间】:2014-07-15 20:29:42
【问题描述】:

我正在尝试从 Excel 工作表中存储的数据填充 3d 数组。我希望我只是不知道语法,但可能无法像使用 2D 数组那样将值“批量”分配给 3D 数组。比如……

Dim 2DArray() As Variant
2DArray = Range(A1:C10)

这非常干净和高效,我希望有类似的东西,而不是使用 3 个嵌套的 for-next 循环来一次填充一个值的数据。

作为背景,这是查找/插入气体压缩系数 Z,它取决于比重、压力和温度。我有 6 个表(实际上只是命名范围),用于 6 个不同的比重值。每个表都有以 Z 因子作为数据点的压力和温度交叉表。这是我的代码(不起作用):

Sub Array3DTest()
    Dim ZTables() As Variant
    ReDim ZTables(1 to 6, 1 to 15, 1 to 9) 
    '6 specific gravity tables, '15 pressure indices, 9 temp indices

    'Here is my feeble attempt to guess the syntax...
    'ZTables = ("tblZFactorSG1", "tblZFactorSG2", "tblZFactorSG3",
    '              "tblZFactorSG4", "tblZFactorSG5", "tblZFactorSG6")

End Sub

为了澄清,tblZFactorSG1...SG2...SG3...等是 6 个具有交叉表 Z 因子的命名范围。全部为 15 行(压力)乘 9 列(温度)。最后一行被注释掉了,因为 VBA 不喜欢这种语法,但也许你可以看到我在这里尝试做的事情。我正在尝试以 15x9 的块将数据分配给 3Darray。 tblZFactorSG1 包含应该进入 ZTables 的值(1、1 到 15、1 到 9)。 tblZFactorSG2 包含应该进入 ZTables 的值(2、1 到 15、1 到 9)。

提前感谢您的帮助。

【问题讨论】:

  • 您要么必须满足于 6 个 2-d 数组(每个都使用 .Value 方法提取)的数组,要么使用循环“手动”创建 3-d 数组。没有内置的方法可以做你想做的事。
  • 我认为 6 个二维数组的数组也会很有用。我认为称为锯齿状数组。您介意解释/显示您提到的“.Value”方法的代码吗?感谢您的澄清,蒂姆。

标签: arrays excel vba multidimensional-array assign


【解决方案1】:
Sub ArrayOfArrays()

    Dim ZTables(1 to 6) As Variant, x as Long, ranges

    ranges = Array("tblZFactorSG1", "tblZFactorSG2", "tblZFactorSG3", _
                 "tblZFactorSG4", "tblZFactorSG5", "tblZFactorSG6")

    For x=1 to 6
        ZTables(x) = ActiveSheet.Range(ranges(x-1)).Value  
    Next x

End Sub

【讨论】:

  • 像魅力一样工作。再次感谢蒂姆。不幸的是,我没有足够的凭据来更新您的答案。
  • 只是为了添加一个注释以防万一这绊倒了其他人,您将使用 ZTables(x)(y,z) 而不是 ZTables(x,y,z) 访问 ZTables 中的值(这是我第一次尝试的)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-19
相关资源
最近更新 更多