VBA矩阵乘法报错求助:无法将MMult结果存入目标矩阵元素
解决VBA中MMult矩阵乘法赋值单个元素的错误
我来帮你捋清楚这个问题——你碰到的错误根源其实很直观:Application.WorksheetFunction.MMult的返回值是一个二维数组,哪怕你的矩阵相乘结果是单个数值,它也会被包装在1×1的二维数组里,而你直接把这个数组赋值给单个变量ArrWs(x),就会触发类型不匹配的错误。
核心问题拆解
矩阵乘法有严格的维度要求:如果要让ArrC和ArrW相乘得到单个值,你需要保证:
- ArrC是1行4列的二维数组(行向量)
- ArrW是4行1列的二维数组(列向量)
这样两者相乘后会得到1×1的二维数组,你需要提取这个数组的(1,1)元素,才能赋值给ArrWs(x)这种单个变量。
具体解决方案
1. 确保矩阵维度正确
如果你的ArrW和ArrC原本是一维数组(比如ArrW = Array(1,2,3,4)),需要先转成符合乘法要求的二维数组:
- 把一维行向量转成1×4的二维数组:
ArrC = Application.Transpose(Application.Transpose(ArrC)) - 把一维列向量转成4×1的二维数组:
ArrW = Application.Transpose(ArrW)
2. 修改赋值语句,提取单个元素
把你原来的赋值语句改成:
ArrWs(x) = Application.WorksheetFunction.MMult(ArrC, ArrW)(1, 1)
这里的(1,1)就是取出MMult返回的二维数组中唯一的那个数值。
完整示例代码
Sub FixMatrixMultIssue() Dim ArrC As Variant, ArrW As Variant Dim ArrWs(1 To 2) As Double ' 存储两次计算结果的数组 ' 初始化一维数组,再转成符合要求的二维矩阵 ArrC = Array(1, 2, 3, 4) ArrC = Application.Transpose(Application.Transpose(ArrC)) ' 转成1行4列 ArrW = Array(5, 6, 7, 8) ArrW = Application.Transpose(ArrW) ' 转成4行1列 ' 第一次计算,赋值给ArrWs(1) ArrWs(1) = Application.WorksheetFunction.MMult(ArrC, ArrW)(1, 1) ' 修改ArrW的数值(这里以修改第一个元素为例) ArrW(1, 1) = 10 ' 第二次计算,赋值给ArrWs(2) ArrWs(2) = Application.WorksheetFunction.MMult(ArrC, ArrW)(1, 1) ' 输出结果到立即窗口验证 Debug.Print "第一次计算结果:" & ArrWs(1) Debug.Print "第二次计算结果:" & ArrWs(2) End Sub
额外提示
如果不确定自己的数组维度,可以用UBound和LBound来检查:
' 检查ArrC的行数和列数 Debug.Print "ArrC行数:" & UBound(ArrC, 1) & ",列数:" & UBound(ArrC, 2) ' 检查ArrW的行数和列数 Debug.Print "ArrW行数:" & UBound(ArrW, 1) & ",列数:" & UBound(ArrW, 2)
确保ArrC的列数等于ArrW的行数,这是矩阵乘法的基本要求。
内容的提问来源于stack exchange,提问作者neke
相关产品推荐
相关产品推荐

