Excel VBA将单元格数组传入函数

我正在尝试编写一个简单的VBA函数,如下所示:

Public Function ReturnMMult(Arr1() As Variant, Arr2() As Variant) As Variant ReturnMMult = WorksheetFunction.MMult(Arr1,Arr2) End Function 

但它总是给我#VALUE! 我已经尝试将Arr的更改为Ranges,但这也不起作用。 我基本上希望能够编写的function,可以采取像$ A1:$ A10或类似的东西。 看了很多地方,搞不清楚。 我究竟做错了什么?

就像是

 Public Function M(a As Excel.Range, b As Excel.Range) As Variant() Dim a1() As Variant Dim a2() As Variant a1 = a.value a2 = b.value M = Application.WorksheetFunction.MMult(a1, a2) End Function 

你需要把它们作为范围,然后将它们转移到数组:

 Public Function ReturnMMult(Arr1rng As Range, Arr2rng As Range) As Variant Dim Arr1() As Variant: Arr1 = Arr1rng.Value Dim Arr2() As Variant: Arr2 = Arr2rng.Value ReturnMMult = WorksheetFunction.MMult(Arr1, Arr2) End Function 

在这里输入图像说明

这是使用MMult工作表函数的一个例子。 请采纳你的情况。

 Sub test() Dim xArray As Variant, yArray As Variant, zArray As Variant Dim Fn As Object Set Fn = Application.WorksheetFunction xArray = Range("A1:B2").Value yArray = Range("D1:E2").Value zArray = Fn.MMult(xArray, yArray) ActiveCell.Resize(2, 2).Value = zArray End Sub 

MMult返回#VALUE! 错误时:任何单元格为空或包含文本。 array1中的列数与array2中的行数不同。 结果数组的大小等于或大于总计5,461个单元格。 参考WorksheetFunction.MMult方法