簡體   English   中英

Excel VBA將單元格數組傳遞給函數

[英]Excel VBA Pass Cell Array into Function

我正在嘗試編寫一個簡單的VBA函數,如下所示:

Public Function ReturnMMult(Arr1() As Variant, Arr2() As Variant) As Variant

    ReturnMMult = WorksheetFunction.MMult(Arr1,Arr2)

End Function

但這總是給我#VALUE! 我曾嘗試將Arr's更改為Ranges,但這也不起作用。 我基本上希望能夠編寫可以采用$ 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方法

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM