簡體   English   中英

將標量 VBA function 應用於數組中的每個單元格

[英]Apply a scalar VBA function to each cell in an array

我有一個 VBA function 執行數值計算,例如:

Function MyFunc(ByVal x As Double, ByVal a As Double) As Double
    MyFunc = x + a
End Function

我想使用工作表公式將此 function 應用於數組並對值求和。 例如,在單元格B1中,我想輸入:

=SUM(MyFunc(A1#, 2))

含義為(如果A1#是動態數組A1:A3 ):

=SUM(MyFunc(A1,2), MyFunc(A2,2), MyFunc(A3,2))

我可以這樣做而不必在我的 VBA function 中顯式編寫數組循環嗎?

如果要將溢出傳遞給 UDF,可以將其作為Range傳遞:

Function MyFunc(x As Range, a As Double)
    Dim L As Long, U As Long, arr, i As Long
    Dim r As Range
    L = 1
    U = x.Count
    ReDim arr(L To U)

    For i = L To U
        arr(i) = x(i) + a
    Next i
    MyFunc = arr
End Function

因此,在單元格C1的工作表中,我們輸入:

=myfunc(A1#,8)

如您所見,它溢出了,在C2中我們輸入:

=SUM(myfunc(A1#,8))

在此處輸入圖像描述

如您所見,我們給它一個Range 它返回一個SUM()可以輕松處理的Array

您可以將 Evaluate 與范圍結合使用:

Function MyFunc1(x As Range, ByVal a As Double) As Variant
    MyFunc1 = Application.Evaluate("(" & x.Address & "+" & a & ")")
End Function

並直接總結:

Function MyFunc1(x As Range, ByVal a As Double) As Variant
    MyFunc1 = Application.Evaluate("SUM(" & x.Address & "+" & a & ")")
End Function

暫無
暫無

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

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