Excel SUMIFS多条件单元格值

Excel SUMIFS多条件单元格值,excel,vba,sumifs,Excel,Vba,Sumifs,有人问过这个问题,但不完全是这样。这是非常接近的,但这个解决方案对我不起作用 我有一个函数,它将逗号分隔的值返回到单元格中。我希望使用如下方法将该单元格中的元素作为标准传递给SUMIFS函数 我的尝试如下图所示: 我相信这与功能理解G8细胞的方式有关。看起来它在添加一些额外的引号。如果我在公式栏中高亮显示G8并按F9,我会得到: 每个标准的每一侧都有额外的引号 我对自定义VBA函数解决方案持开放态度,但我更喜欢可以构建为工作表函数的解决方案。这些条件是从自定义VBA函数返回的,该函数从列表框

有人问过这个问题,但不完全是这样。这是非常接近的,但这个解决方案对我不起作用

我有一个函数,它将逗号分隔的值返回到单元格中。我希望使用如下方法将该单元格中的元素作为标准传递给
SUMIFS
函数

我的尝试如下图所示:

我相信这与功能理解G8细胞的方式有关。看起来它在添加一些额外的引号。如果我在公式栏中高亮显示G8并按F9,我会得到:

每个标准的每一侧都有额外的引号


我对自定义VBA函数解决方案持开放态度,但我更喜欢可以构建为工作表函数的解决方案。这些条件是从自定义VBA函数返回的,该函数从列表框中提取元素,并执行一些正则表达式工作以删除额外的逗号。可以选择的元素数量是可变的,因此我希望避免将标准拆分为多个单元格。谢谢

似乎原始的逗号分隔标准在
G6
中,您只需将此标准拆分为一个数组,并将其馈送到
SUMIFS
。拆分在VBA中可用,但不向Excel公开。我们只需要编写一个小的UDF来拆分CSV,并在公式中使用它:

Function splitCSV(str As String)
    splitCSV = Split(str, ",")
End Function
现在,
F10
中的公式是:

=SUM(SUMIFS(C3:C10, B3:B10, "blue", A3:A10, splitCSV(G6)))
编辑

上面是一个数组公式(Ctrl+Shift+Enter)。为了得到一个标准公式,我们可以使用
SUMPRODUCT
而不是
SUM
。这将带来更大的灵活性(普通公式与数组公式),以及一些“预期”的性能改进

=SUMPRODUCT(SUMIFS(C3:C10, B3:B10, "blue", A3:A10, splitCSV(G6)))

{“Dog”,“Cat”}
字符串是字符串,而不是数组。传递一个字符串,即使它类似于一个数组,仍然是一个字符串而不是数组,因此不起作用。您说您有一个VBA函数,它将逗号分隔的列表返回到单元格中。尝试更改它以返回数组,并在
SUMIFS
公式中调用它(绕过将列表返回到单元格),谢谢@chrisneilsen。我使用的函数非常类似于所列答案示例2中的函数。我试图按照示例返回一个集合,但在我的输出中出现了“参数非可选”错误。关于如何确保我的函数返回所需的数组,你有什么想法吗?如果你发布代码并描述你希望函数反求的内容,我可以提供帮助。我刚刚在对@chris neilson发表评论后想,“嘿,为什么我不写一个VBA函数来将单元格字符串拆分成数组!?”你明白我的意思。非常感谢。这个工作非常出色。顺便说一下,这个答案给了我版主工具,谢谢@NickCriswell除非您对csv列表有其他用途,否则我仍然认为返回数组而不是csv列表是更好的选择solution@chrisneilsen,是的,我将修改我的代码,以便在最终返回之前进行字符串拆分。你的评论和答案无疑为我指明了正确的方向。感谢您的帮助。@NickCriswell很抱歉之前没有提及此事。无论如何,实际上,您可以将它作为一个普通(非数组)公式,用
SUMPRODUCT
替换
SUM
。后者在馈入单个阵列时的行为与前者相同,但不需要是阵列公式。在这种情况下,这是一个很棒的工具。