我正在尝试在Excel中创建一个返回列表的函数。其背后的原因是:
在我的工作簿中,我使用的是SUMIFS。有用户选择标准的下拉菜单然后作为参数传递给SUMIFS。举一个例子,假设我在单元格A1中有一个下拉列表,可能的值是:"A", "B", "C", "D", "E", "F"
。我的公式是:
=SUMIFS(sumRange,criteriaRange,A1)
假设我想在下拉列表中再添加两个项目:“所有元音”(所以"A"
和"E"
)和“所有辅音”(所以"B", "C", "D", "F"
)。我找到了一种在SUMIFS中提供替代条件的方法,方法是用SUM包装它并在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"}"
。没有人做过这项工作。
答案 0 :(得分:1)
您只需添加额外的计算级别即可。这可以通过输入SUM(SUMIFS(...))
作为数组公式来完成,其中 Ctrl + Shift + Enter↵或替换{{3对于SUMPRODUCT function包装器,总计迭代,因为SUM function循环遍历条件中的OR元素。
示例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
示例工作表:
F5中返回正确结果的数组公式是
=SUM(SUMIFS(D1:D6, C1:C6, ma(A1)))
需要使用 Ctrl + Shift + Enter↵来最终确定数组公式。一旦输入正确,它们可以像其他公式一样被复制或填充到其他位置(取决于相对/绝对单元格范围寻址)。
F6中返回正确结果的标准公式是
=SUMPRODUCT(SUMIFS(D1:D6, C1:C6, ma(A1)))
SUMPRODUCT功能提供了公式所需的额外处理层,而无需使用CSE。
如果扩展UDF的Select Case
,阵列公式w / CSE和SUMPRODUCT仍然可以使用非数组,单一标准而不会受到惩罚。