我正在寻找一些帮助在Excel的VBA中执行一些矩阵数学。我已经阅读了大量使用Excel工作表的回复,但我希望在VBA代码中解决这个问题。
虽然我的应用程序要大得多,但假设我有一个线性方程组需要解决:
x1 + x2 = 8
2*x1 + 4*x2 = 100
这可以通过简单的矩阵公式A * x = B或x = A ^( - 1)* B来解决,其中,
A = [1, 1; 2, 4]
B = [8; 100]
如果你解决这个问题,你会发现x1 = -34和x2 = 42.就矩阵而言:
X = [-34; 42]
使用Excel的工作表以及它的MMULT和MINVERSE函数使这很容易,我已经让它工作得很好。我的问题是我需要在VBA函数中进行此计算。这是我正在尝试的:
Dim A(0 To 1, 0 To 1) As Single
Dim B(0 To 0, 0 To 1) As Single
Dim X(0 To 0, 0 To 1) As Single
A(0, 0) = 1
A(1, 0) = 1
A(0, 1) = 2
A(1, 1) = 4
B(0, 0) = 8
B(0, 1) = 100
X = Application.WorksheetFunction.MMult(Application.WorksheetFunction.MInverse(A), B)
不幸的是,最后一行会产生“编译错误:无法分配给数组”消息。我认为这是因为我必须一次指定一个数组的每个元素,但工作表函数是数组函数。
我该如何解决这个问题?
答案 0 :(得分:9)
两件事:
同样的规则适用于实际数学:B
必须是一个垂直数组,以便在您的情况下进行矩阵乘法。将其声明为
Dim B(0 To 1, 0 To 0) As Single
并相应地初始化它。另外,只需声明
Dim X As Variant
因为MMult
返回Variant数组。这是导致您原始错误的原因。