vba - 将 MMult 的结果分配给数组变量时类型不匹配

标签 vba excel matrix

为新手问题道歉,但我在搜索时找不到答案。

我对 VBA 中的矩阵操作相当陌生。我不断得到与以下代码的类型不匹配。

Sub matrixtest()

Dim matrix1() As Integer
Dim matrix2() As Integer
Dim matrix3() As Integer
Dim i, j, k As Integer

'populate matrix1
ReDim matrix1(3, 3)
For j = 1 To 3
    For i = 1 To 3
        matrix1(i, j) = Range("C5").Offset(i - 1, j - 1)
    Next i
Next j

'populate matrix2
ReDim matrix2(3, 3)
For j = 1 To 3
    For i = 1 To 3
        matrix2(i, j) = Range("G5").Offset(i - 1, j - 1)
    Next i
Next j

ReDim matrix3(3, 3)
matrix3 = Application.WorksheetFunction.MMult(matrix1, matrix2)

End Sub

最佳答案

如果换行

matrix3 = Application.WorksheetFunction.MMult(matrix1, matrix2)

经过
Debug.Print TypeName(matrix3 = Application.WorksheetFunction.MMult(matrix1, matrix2))

输出是:
Variant()

不能分配给 Integer() .

我建议更换
Dim matrix1() As Integer
Dim matrix2() As Integer
Dim matrix3() As Integer
Dim i, j, k As Integer

经过
Dim matrix1, matrix2, matrix3 As Variant 'note lack of ()
Dim i, j, k As Long 'Integer is borderline obsolete in VBA

变体在保存和传递数组方面做得很好,并且倾向于自动处理任何需要的类型转换。在 VBA 中处理数组时,我倾向于几乎完全使用它们。一方面,它可以轻松地从范围加载数组。

只需使用 ReDim使变体保持数组:
ReDim matrix1(1 to 3, 1 to 3) 'doesn't hurt to be explicit about lower bounds
ReDim matrix2(1 to 3, 1 to 3)
'load arrays...
'no need to redim matrix3, just:
matrix3 = Application.WorksheetFunction.MMult(matrix1, matrix2)

有一种更短的方法来做你想做的事情:
matrix1 = Range("C5:E7").Value
matrix2 = Range("G5:I7").Value
matrix3 = Application.WorksheetFunction.MMult(matrix1, matrix2)

在上面的代码中你不需要使用任何初步的 ReDim .当您想将矩形范围的值加载到 VBA 中的变体中时,您不需要循环,这不必要地慢。只需一举分配值。

关于vba - 将 MMult 的结果分配给数组变量时类型不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42118901/

相关文章:

vba - 如何更改命名范围的 RefersTo?

vba - excel VBA : operating with dates from spread sheet into a while/do

python - 使用 excel 值在 python 中执行计算

excel - 如果标题没有文本,如何隐藏用户窗体上的选项按钮

java - 我有矩阵,我需要总结指定行和列周围的所有值,包括提供的位置。然后输出平均值

excel - Excel 2016 for Mac 中的 VBA 宏 : SaveAs will not work with a CSV file format

excel - VBA - 打开工作簿的用户名(只读)

excel - 根据vba中单元格(查找)中可用的值执行while循环

python - 将多类数组投影为二进制矩阵

r - 从邻接矩阵中快速计算任意一对节点之间的共享邻居数