2017-02-08 231 views
2

Similarquestions这已被问到,但不完全是这样的。有非常接近的one,但该解决方案不适合我。Excel SUMIFS多个标准单元格值

我有一个函数,它将逗号分隔值返回到单元格中。我想通过使用类似one的方法将该单元中的元素作为标准传递给SUMIFS函数。

我尝试如下图所示:

enter image description here

我认为,这在某种程度上依赖于该功能是理解什么是在细胞G8的方式。它看起来像增加了一些额外的引号。如果我在公式栏中,然后按F9突出G8,我得到:

enter image description here

有对每个标准每侧额外的引号。

我打开一个自定义的VBA函数解决方案,但我更喜欢可以构建为工作表函数的东西。条件从一个自定义的VBA函数返回,该函数将元素从列表框中拉出来,并执行一些正则表达式来移除额外的逗号。可以选择的元素数量是可变的,所以我想避免将标准分割成多个单元格。谢谢。

+1

“{”Dog“,”Cat“}”字符串是_string_,而不是数组。传递一个字符串,即使它类似于一个数组,仍然是一个字符串而不是一个数组,所以不起作用。你说你有一个VBA函数,它将一个逗号分隔的列表返回给一个单元格。尝试改变它返回一个数组,并在你的'SUMIFS'公式中调用它(绕过将列表返回给单元格) –

+0

Thanks @chrisneilsen。我正在使用的函数非常类似于[在这里]列出的答案的示例2中的函数(http://stackoverflow.com/questions/22542834/how-to-use-regular-expressions-regex-in-microsoft -excel-两个功能于细胞和循环)。我试图按照示例[这里](http://stackoverflow.com/questions/1815980/excel-vba-function-returning-an-array)返回一个集合,但我得到一个错误'参数不可选'在我的输出。任何想法如何确保我的函数根据需要返回数组? –

+0

如果你发布了代码和你想要的函数的描述,我可以帮助 –

回答

1

似乎原始的逗号分隔条件在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。这导致更多的灵活性(普通公式vs数组公式)以及一些“预期”性能改进。

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

我只是在对@chris neilson发表评论后想:“嘿,为什么我不写一个VBA函数来分割单元格串入数组!“?你最懂我心。谢谢!这工作出色。 –

+0

@NickCriswell太棒了。很高兴知道它帮助:) –

+1

顺便说一句,这个答案给了我版主工具,谢谢! –