2015-04-03 132 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 ..

相关问题