【问题标题】:Excel SUMIFS Multiple Criteria Cell ValueExcel SUMIFS 多条件单元格值
【发布时间】:2017-02-10 04:46:24
【问题描述】:

Similarquestions 已被问到此问题,但并非完全如此。 one 非常接近,但该解决方案对我不起作用。

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

我的尝试如下图:

我相信这在某种程度上与函数理解单元格 G8 中内容的方式有关。看起来它正在添加一些额外的引号。如果我在公式栏中突出显示 G8 并按 F9,我会得到:

每个条件的每一侧都有额外的引号。

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

【问题讨论】:

  • {"Dog","Cat"} 字符串是 字符串,而不是数组。传递一个字符串,即使它类似于一个数组,仍然是一个字符串而不是一个数组,所以不会起作用。您说您有一个 VBA 函数,可以将逗号分隔的列表返回到单元格中。尝试更改它以返回一个数组,并在您的 SUMIFS 公式中调用它(绕过将列表返回到单元格)
  • 谢谢@chrisneilsen。我正在使用的函数很像here 列出的答案的示例 2 中的函数。我尝试按照示例here 返回一个集合,但我的输出中出现“argument not optional”错误。关于如何确保我的函数按需要返回数组的任何想法?
  • 如果您发布代码和您想要的功能的描述,我可以提供帮助

标签: excel vba sumifs


【解决方案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。这会带来更大的灵活性(普通公式与数组公式)以及一些“预期”的性能改进。

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

【讨论】:

  • 在对@chris neilson 发表评论后,我只是在想,“嘿,我为什么不写一个 VBA 函数来将单元格字符串拆分为数组!?”你最懂我心。谢谢!这非常有效。
  • 顺便说一句,这个答案给了我版主工具,谢谢!!
  • @NickCriswell 除非您对 csv 列表有其他用途,否则我仍然认为返回数组而不是 csv 列表是更好的解决方案
  • @chrisneilsen,是的,我要修改我的代码,以便在最终返回之前进行字符串拆分。您的 cmets 和答案无疑为我指明了正确的方向。感谢您的帮助。
  • @NickCriswell 抱歉之前没有提及。无论如何,实际上,您可以通过将SUM 替换为SUMPRODUCT 来将其作为普通(非数组)公式。后者在输入单个数组时将像前者一样起作用,但不需要是数组公式。在这种情况下,它是一个很棒的工具。
猜你喜欢
  • 1970-01-01
  • 2014-02-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多