【问题标题】:Excel - SUMIF based on a multi-select dropdownExcel - 基于多选下拉列表的 SUMIF
【发布时间】:2020-03-11 00:54:47
【问题描述】:

我有一个嵌套的 SUMIF 语句,它根据当前工作表中下拉列表单元格的条件对 Sheet2 中的数据求和。

单元格 A 包含城市名称...

---(如果 A2 = "Albuquerque",那么它将在 Sheet2 的 A 列中对 Albuquerque 的数据求和)

B 列包含月份... ---(如果 B2 = "2019 年 1 月",那么它将从 Sheet2 的 B 列中汇总 2019 年 1 月的数据)

基本公式是……

 =IF(AND($A$2="",$B$2=""),SUM('Sheet 2'!J:J),IF(AND($A$2<>"",$B$2=""),SUMIF(Sheet 2'!A:A,A2,'Sheet 2'!J:J),IF(AND($A$2="",$B$2<>""),SUMIF(Sheet 2'!B:B,B2,'Sheet 2'!J:J),IF(AND($T$2<>"",$T$3<>""),SUMIFS('Sheet 2'!J:J,'Sheet 2'!A:A,A2,'Sheet 2'!B:B,B2))))

只要为下拉列表单元格选择一个值,此公式就有效。

但下拉列表启用了多选,并用逗号分隔两个值。如果我从下拉列表单元格的下拉列表中选择多个项目,则 SUMIFS 公式无法理解并且不返回任何内容。

---即:如果我在单元格 A2 中选择阿尔伯克基和凤凰城,A2 将显示“阿尔伯克基,凤凰城”。但 SUMIF 不会识别这一点,并将返回 0 而不是 Albuquerque 和 Phoenix 的数据。

我想知道是否有一种方法可以设计我的公式,以识别下拉列表单元格中的两个以上项目并根据这两个值过滤数据。

【问题讨论】:

    标签: excel vba excel-formula


    【解决方案1】:

    我们可以迭代逗号分隔的值:

    TRIM(MID(SUBSTITUTE(A2,",",REPT(" ",999)),(ROW($ZZ$1:INDEX($ZZ:$ZZ,LEN(A2)-LEN(SUBSTITUTE(A2,",",""))+1))-1)*999+1,999))
    

    我们还可以将 IF 移到 SUMIFS 中,以使用 "*" 在空白时返回所有内容。

    我们需要转置第二个下拉列表中返回的第二个数组。二是可以使用的最大逗号分隔列表。

    =SUMPRODUCT(SUMIFS('Sheet 2'!J:J,'Sheet 2'!A:A,IF(A2="","*",TRIM(MID(SUBSTITUTE(A2,",",REPT(" ",999)),(ROW($ZZ$1:INDEX($ZZ:$ZZ,LEN(A2)-LEN(SUBSTITUTE(A2,",",""))+1))-1)*999+1,999))),'Sheet 2'!B:B,IF(B2="","*",TRANSPOSE(TRIM(MID(SUBSTITUTE(B2,",",REPT(" ",999)),(ROW($ZZ$1:INDEX($ZZ:$ZZ,LEN(B2)-LEN(SUBSTITUTE(B2,",",""))+1))-1)*999+1,999))))))
    

    【讨论】:

    • 斯科特,这令人印象深刻。我将它插入我的模型进行测试,它没有给我任何错误,这非常了不起。但是,它返回的数字似乎比预期的要大得多,我认为这可能与拼图中的 SUMPRODUCT 部分有关。我的问题是,为什么我们将其包装在 SUMPRODUCT 中,以及您如何在示例中获得数字“5”。
    • SUMPRODUCT 是必要的,否则它只会返回第一个匹配项而不迭代列表。至于它太大,您需要手动检查它与正在生产的东西。它可以按我的意愿工作。
    • 我明白了,这很扎实。不幸的是,由于某种原因,它仍然无法识别下拉单元格的第二部分。如,如果 Albequerque 和 Phoenix 同时存在,它将返回 Albequerque 的正确答案,但不包括 Phoenix。不用担心。我会尝试自己进一步解决这个问题。不过谢谢!
    • @MiguelZaldivar 它可能与单元格中的值有关,而不是它实际显示的值。在空白单元格=A2 中尝试,看看它是否真的返回逗号分隔值。
    • 好的,我会的。谢谢。
    猜你喜欢
    • 2022-01-20
    • 1970-01-01
    • 2017-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多