Vba 乘法矩阵(下标超出范围)

Vba 乘法矩阵(下标超出范围),vba,excel,matrix,Vba,Excel,Matrix,我试着把程序放进VBA,但总是出错。这一行突出显示: B(i, j) = C(i, j) + A(i + 1, j) * A(i, j + 1) 我试着将两个相同的矩阵相乘,然后将其自身相加 假设我想乘以一个15 x 15的矩阵,除了改变尺寸和范围外,我会使用相同的代码吗 Sub testing() Dim A As Variant Dim B(1 To 2, 1 To 2) Dim C(1 To 2, 1 To 2) A = Range("A1:B2").Value i = 1 C(1,

我试着把程序放进VBA,但总是出错。这一行突出显示:

B(i, j) = C(i, j) + A(i + 1, j) * A(i, j + 1)
我试着将两个相同的矩阵相乘,然后将其自身相加

假设我想乘以一个15 x 15的矩阵,除了改变尺寸和范围外,我会使用相同的代码吗

Sub testing()

Dim A As Variant
Dim B(1 To 2, 1 To 2)
Dim C(1 To 2, 1 To 2)

A = Range("A1:B2").Value
i = 1
C(1, 1) = 0
Do Until i = 3
    j = 1
    Do Until j = 3
        C(i, j) = C(i, j) + A(i, j) * A(j, i)
        **B(i, j) = C(i, j) + A(i + 1, j) * A(i, j + 1)**
        j = j + 1
    Loop
    i = i + 1
Loop
Range("E1:F2").Value = B
End Sub
谢谢

Do…Loop不是此作业的正确工具。用…代替下一个。此外,为了帮助确保不会超出数组边界并获得下标超出范围的错误,可以使用LBound和UBound,而不是硬编码索引边界。这样,如果更改输入矩阵的大小,就不必更改代码

这会让你走上一段路。为了简单起见,我假设A是一个平方矩阵

Dim i As Long, j As Long
Dim A As Variant
Dim B() As Variant
Dim C() As Variant

A = Range("A1:B2").Value
ReDim B(LBound(A, 1) To UBound(A, 1), LBound(A, 2) To UBound(A, 2))
ReDim C(LBound(A, 1) To UBound(A, 1), LBound(A, 2) To UBound(A, 2))

For i = LBound(A, 1) To UBound(A, 1)
    For j = LBound(A, 2) To UBound(A, 2)
        C(i, j) = C(i, j) + A(i, j) * A(j, i)
        B(i, j) = C(i, j) + A(i + 1, j) * A(i, j + 1) ' still bad
    Next j
Next i
现在,由于i+1和j+1索引,在同一行上仍然会出现错误。它们在某个点上的值为3,这超出了数组的2界限。我不能帮你修那条线,因为我不明白你想用它做什么

这就引出了我的下一个观点:如果你认为你在用这条线做一个测试

C(i, j) = C(i, j) + A(i, j) * A(j, i)
那你错了。正确的定义是:

而这并不是你所实现的

可能更方便的方法是使用内置的MMult函数:

C = WorksheetFunction.MMult(A, A)

它抛出一个错误,因为您试图分配给C和B数组的元素已经超过了您在i=3和j=3时声明的1到2、1到2的大小。它应该一直到i<3或者一直到i=2?嗯。。。它仍然不起作用。当我<3时,它不应该做吗?当j<3时,它不应该做吗?