我第一次使用 VBA Excel UDF。我的目標是創建類似于“SumIf”的內容,但通過專案串列獲取次要標準(寫入單元格并用“|”分隔)。
我已經通過回呼 sub 測驗了這個 UDF,逐步完成程序,在這里它作業正常(這是測驗子:MsgBox SommaSeIncludo(Range("A:A"), Range("B:B"), Range("B1"), Range("C:C"), "D1")但是,我不知道為什么,如果我將公式放入單元格它只顯示一個“值”錯誤(=SommaSeIncludo(A:A;B:B;B1;C:C;D1))。你有什么想法嗎?
這是我的代碼:
Function SommaSeIncludo(ByVal intSomma As Range, ByVal intCriteri1 As Range, ByVal criteri1 As Range, ByVal intCriteri2 As Range, ByVal listaCriteri2 As String) As String
Dim listaCriteri2Array As Variant
Dim numberOfListaCriteri2ArrayItems As Integer
Dim thisItemCriteria As String
Dim subTotal As Double
Dim total As Double
Dim thisSheet As Worksheet
Set thisSheet = ThisWorkbook.Sheets("MySheet")
total = 0
listaCriteri2Array = Split(thisSheet.Range(listaCriteri2).Value, "|")
numberOfListaCriteri2ArrayItems = UBound(listaCriteri2Array) - LBound(listaCriteri2Array)
For i = 0 To numberOfListaCriteri2ArrayItems
subTotal = 0
thisItemCriteria = listaCriteri2Array(i)
subTotal = WorksheetFunction.SumIfs(intSomma, intCriteri1, criteri1.Value, intCriteri2, thisItemCriteria)
total = subTotal total
Next
SommaSeIncludo = total
End Function
uj5u.com熱心網友回復:
以下評論中的建議:
簡短的回答是,您可以通過在呼叫函式時將 D1 變為字串來使其作業:
=SommaSeIncludo(A:A;B:B;B1;C:C;"D1")
但最好通過將函式的第一行更改為
Function SommaSeIncludo(ByVal intSomma As Range, ByVal intCriteri1 As Range, ByVal criteri1 As Range, ByVal intCriteri2 As Range, ByVal listaCriteri2 As Range) As Long
如果您希望它在指定作業表中參考 D1,我只知道 Split 陳述句中將范圍轉換為字串、將其與作業表名稱連接并轉換回范圍的稍微冗長的構造:
listaCriteri2Array = Split(Range("MySheet" & "!" & listaCriteri2.Address).Value, "|")
看
也許最好不要將其系結到特定作業表,因為您始終可以將 MySheet!D1 放在函式呼叫中,并將 Split 行保留為
listaCriteri2Array = Split(listaCriteri2.Value, "|")
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/454705.html
