[英]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.