2015-04-03 135 views
0

我想在Excel中創建一個返回列表的函數。其背後的原因是:Excel/VBA - 如何創建一個返回列表的函數

在我的工作簿中,我使用SUMIFS。在用戶選擇標準後,會有下拉菜單,然後將這些標準作爲參數傳遞給SUMIFS。舉個例子,假設我在單元格A1中有一個下拉菜單,可能的值是:"A", "B", "C", "D", "E", "F"。我的公式是:

=SUMIFS(sumRange,criteriaRange,A1) 

假設我想兩個項目添加到下拉菜單:「所有元音」(所以"A""E")和「所有輔音」(所以"B", "C", "D", "F")。我找到了一種方法用SUM包裹了起來,下面的例子提供在SUMIFS元素的列表想給在SUMIFS替代條件:

=SUM(SUMIFS(sumRange,criteriaRange,{"A","E"}) 
=SUM(SUMIFS(sumRange,criteriaRange,{"B", "C", "D", "F"}) 

現在我想用一個函數來替代上述列表( f)將A1的值作爲參數並返回: {"A","E"} - 當A1是「所有元音」 {"B", "C", "D", "F"} - 當A1是「所有輔音」 身份在所有其他情況下。 最後我想下述式工作:

=SUM(SUMIFS(sumRange,criteriaRange,f(A1)} 

在A1任何選擇。可能嗎?
我嘗試了不同的方法,例如返回一個數組,或返回一個字符串"{"A","E"}"。這些工作都沒有。

回答

1

你只需要添加一個額外的計算水平。這可以通過輸入SUM(SUMIFS(...))作爲數組公式與Ctrl鍵 + + Enter↵或用於SUM function包裝,通過在標準的或元素總計迭代作爲SUMIFS function環取代SUMPRODUCT function來完成。

樣品UDF:

Function ma(sCRIT As String) 
    Select Case LCase(sCRIT) 
     Case "all vowels" 
      ma = Array("A", "E") 
     Case "all consonants" 
      ma = Array("B", "C", "D", "F") 
     Case Else 
      ma = sCRIT 
    End Select 
End Function 

樣品的工作表:

UDF returning an array

在F5的陣列式返回正確的結果是,

=SUM(SUMIFS(D1:D6, C1:C6, ma(A1))) 

數組公式需要與按Ctrl ++Enter↵完成。一旦輸入正確,它們可以像任何其他公式一樣被複制或填充到其他位置(受到相對/絕對單元格範圍尋址的影響)。

在F6的標準公式返回正確的結果是,

=SUMPRODUCT(SUMIFS(D1:D6, C1:C6, ma(A1))) 

的SUMPRODUCT功能提供了處理的額外層,您的公式需要在不使用CSE的。

兩個數組公式瓦特/ CSE和SUMPRODUCT仍然可以使用非陣列,單個標準不受處罰如果展開UDF的Select Case ..

相關問題