首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在excel vba中获取数组中元素的子集?

如何在excel vba中获取数组中元素的子集?
EN

Stack Overflow用户
提问于 2018-06-15 02:44:45
回答 2查看 9.5K关注 0票数 0

如何在excel vba中获取数组中的第3到第6个元素?类似于下面的内容。

    Dim x(9) as variant, y(3) as variant

    y(0:3) = x(2:5)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-15 04:00:28

在VBA中,不像在python中那样,我们不能直接“子集”数组。

我们只能通过指定ij在某些边界之间来循环索引,例如i在第1行和第2行之间,j在第2列和第3列之间。当然,我们也可以通过位置直接索引到数组中,例如arr(1)i只是一个表示行索引的变量,j是列索引。

或者,我们可以使用Index来“分割”出特定的行或列;我猜您可能将其称为子集,但从您的语法来看,我认为您正在以python的方式思考。

Application.WorksheetFunction.Index(array,n, 0)将把行n切出数组

Application.WorksheetFunction.Index(array, 0, n)将把列n切出数组

Option Explicit

Public Sub ArrayStuff()
    Dim arr(0 To 5) As Long, i As Long
    For i = 0 To 5
        arr(i) = i
    Next

    'Loop only required indices
    For i = 2 To 3
        Debug.Print arr(i)
    Next

    'Slice via Application.WorksheetFunction.Index
    Dim arr2(0 To 2, 0 To 2) As Long, j As Long, counter As Long

    For i = LBound(arr2, 1) To UBound(arr2, 1) '<==  here can specify particular rows
        For j = LBound(arr2, 2) To UBound(arr2, 2) '<== here can specify particular columns
            counter = counter + 1
            arr2(i, j) = counter
        Next
    Next

    MsgBox Join(Application.WorksheetFunction.Transpose(Application.WorksheetFunction.Index(arr2, 0, 1)), ",") 'slice a column out
    MsgBox Join(Application.WorksheetFunction.Index(arr2, 1, 0), ",") 'slice a row out
    MsgBox Join(Application.WorksheetFunction.Index(arr2, 2, 0), ",") 'slice a row out
End Sub
票数 4
EN

Stack Overflow用户

发布于 2019-01-06 22:55:34

对于任何不想使用循环或范围方法来处理这个问题的人,这里有一个处理数组子集(不必是整行或整列)的经过测试的解决方案:

Application.Sum(Application.Index(Array(1, 2, 3, 4, 5), 0, Evaluate("ROW(2:5)")))

它对数组的第二个到第五个元素求和(1,2,3,4,5)。对于二维数组,只需执行以下操作:

Application.Average(.Index(DataArray, Evaluate("ROW(17:21)"), 5))

将计算2维数组"DataArray“的5个元素子集(第17到21行,第5列)的平均值。

顺便说一句,我还没有尝试评估这种方法的效率,但它确实是一种变通方法。希望这能有所帮助。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50863989

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档