我想计算一个数组,其中每一行将是前一行和一些矩阵的矩阵乘法。我知道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
?
答案 0 :(得分:1)
这是一些自定义切片函数,它将要切片的数组的第一个和最后一个索引。请参阅TestMe
函数中的注释以了解它的切片方式。这就是它的作用:
Array(1, 2, 3, 4, 5, 67)
SliceMe arr, 1, 4
Array(2, 3, 4, 5)
通常,fromIndex
和toIndex
可以设为可选值,以使功能更加健壮。
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