【问题标题】:Extracting one-dimension array from a multidimension array从多维数组中提取一维数组
【发布时间】:2016-04-04 17:32:59
【问题描述】:

如何编写一个函数来从 VBA 中的多维数组中提取一维数组?

假设我有:

  • 一个3维数组a(3,3,3),

那么现在我要提取:

  • a(1,1,1),

  • a(1,2,1)

a(1,3,1) 到一个新数组中。

我在这里使用 3 维或更多维数组。这是因为我已经知道我们可以使用Application.WorksheetFunction.Index 从二维数组中进行提取。

提前谢谢你。

【问题讨论】:

  • 您是否尝试过编写基于循环的函数来执行此操作?这非常简单(假设您不需要处理任意维度的数组)。
  • Chip Pearson 的网站有很多关于 excel vba 中数组的好东西...here
  • 谢谢@OldUgly,这个网站很有帮助。

标签: arrays excel vba extract


【解决方案1】:

虽然工作表的 INDEX function 可以切出 2D 数组的“行”或“列”,但我不知道有什么方法可以使用它来切出 3D 数组的切片。您似乎需要“手动”分配值。

Sub peel_out_arr()
    Dim i As Long, j As Long, k As Long
    Dim a() As Variant, b As Variant

    ReDim a(1 To 3, 1 To 3, 1 To 3)

    For i = LBound(a, 1) To UBound(a, 1)
        For j = LBound(a, 2) To UBound(a, 2)
            For k = LBound(a, 3) To UBound(a, 3)
                a(i, j, k) = i + j + k
            Next k
        Next j
    Next i

    b = Array(a(1, 1, 1), a(1, 2, 1), a(1, 3, 1))

    For i = LBound(b) To UBound(b)
        Debug.Print b(i)         '<~~ results are 3, 4, 5
    Next i

End Sub

【讨论】:

    【解决方案2】:

    感谢大家的帮助。我决定编写一个使用循环的 sub 来获取数组的第二维。

    Sub slicearray(vArr As Variant, result As Variant, i As Long, j As Long)
        Dim k As Long
        ReDim result(LBound(vArr, 2) To UBound(vArr, 2))
        For k = LBound(vArr, 2) To UBound(vArr, 2)
            result(k) = vArr(i, k, j)
        Next k
    End Sub
    

    通过这个子,如果我将变量b声明为Variant类型的动态数组,我可以得到结果

    Call slicearray(a,b,1,1)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-29
      • 2020-06-11
      相关资源
      最近更新 更多