在VBA中进行数组切片,如何为整行赋值?

时间:2018-01-26 09:14:46

标签: excel vba excel-vba

我想计算一个数组,其中每一行将是前一行和一些矩阵的矩阵乘法。我知道VBA无法直接处理切片,所以我尝试了Excel函数index,如下所示:

Dim my_array()

my_array = Range("some.range")
For i = 2 to 100
    Application.WorksheetFunction.Index(my_array, i, 0) = _
    Application.WorksheetFunction.MMult( _ 
    Application.WorksheetFunction.Index(my_array, i-1, 0), Range("some.matrix"))
Next i

但它没有用。所以我尝试了一些更简单的方法:

WorksheetFunction.index(my_array, 1, 0) = 1

但它也没有用。我是否可以使用Index切片将值分配给my_array

1 个答案:

答案 0 :(得分:1)

这是一些自定义切片函数,它将要切片的数组的第一个和最后一个索引。请参阅TestMe函数中的注释以了解它的切片方式。这就是它的作用:

Array(1, 2, 3, 4, 5, 67)
SliceMe arr, 1, 4
Array(2, 3, 4, 5)

通常,fromIndextoIndex可以设为可选值,以使功能更加健壮。

Sub SliceMe(myArr As Variant, fromIndex As Long, toIndex As Long)

    Dim cnt         As Long
    Dim newArr      As Variant
    Dim realIndex   As Variant

    ReDim newArr(toIndex - fromIndex)

    For cnt = fromIndex To toIndex
        newArr(realIndex) = myArr(cnt)
        realIndex = realIndex + 1
    Next cnt

    myArr = newArr

End Sub

Sub TestMe()

    Dim arr As Variant

    arr = Array(1, 2, 3, 4, 5, 67)

    Debug.Print arr(0)              '1
    Debug.Print arr(UBound(arr))    '67

    SliceMe arr, 1, 4

    Debug.Print arr(0)              '2
    Debug.Print arr(UBound(arr))    '5

End Sub