【问题标题】:Google Sheets counting with multiple criteria使用多个条件计算 Google 表格
【发布时间】:2017-10-15 20:41:09
【问题描述】:

我有一个 Google 表格,其中有几列数据,我想计算有多少行匹配两个条件,其中一个条件匹配两个值之一。

这是我拥有的数据示例:

我想要做的事情是这样的:计算有多少行在 A 列中有“是”,在 B 列中有“A”或“C”。或者有多少行是“否”,或者“我”或“X”。

我想出了这个:

=COUNTIFS($A1:$A21,"Yes",B1:B21,"="&"A")+COUNTIFS($A1:$A21,"Yes",B1:B21,"="&"C")

...但是这感觉很笨拙,如果我决定移动列,则更难更新。更不用说如果我想将多位信息组合到一个单元格中真的很糟糕,例如:

=(COUNTIFS($A1:$A21,"Yes",B1:B21,"="&"A")+COUNTIFS($A1:$A21,"Yes",B1:B21,"="&"C")) & "/" & (COUNTIFS($A1:$A21,"No",B1:B21,"="&"A")+COUNTIFS($A1:$A21,"No",B1:B21,"="&"C"))

我的意思是,这太糟糕了。它有效,但很糟糕。

我尝试使用OR() 没有成功,也尝试了大括号语法但没有成功。我完全承认我可能都做错了,但如果是这样,如果我能弄清楚我错过了什么,那该死的。任何表格专家愿意同情一个老家伙,并告诉我一个更聪明的方法来做到这一点?

【问题讨论】:

    标签: google-sheets formulas


    【解决方案1】:

    目前为止最短的一个:

    =SUMPRODUCT(REGEXMATCH(A1:A8&B1:B8,"(?i)Yes(A|C)"))
    

    使用& 连接两列并在结果上使用REGEX

    • (?i) 不区分大小写
    • yes(A|C) yes 后跟 A 或 C
    • SUM 全部成立。

    对于复杂的情况,

    =ARRAYFORMULA(SUM(--REGEXMATCH(A1:A8&B1:B8,"(?i)yes(A|C)"))&"/"&SUM(--REGEXMATCH(A1:A8&B1:B8,"(?i)no(I|X)")))
    

    请注意,yes/No 之后不应有尾随空格,AC 等之前不应有前导空格。如果有,请使用TRIM

    【讨论】:

    • 美丽。谢谢!
    【解决方案2】:

    我会使用带变量的查询。在 F1 中:

    =query(A:B,"select count(A) where A ='"&C2&"' AND B='"&D2&"' OR A ='"&C2&"' AND B='"&E2&"'")
    

    在 C2 中输入“是”或“否”,在 D2 和 E2 中输入 B 字母(或留空)。在 C1、D1 和 E1 中输入您想要的任何标题。

    【讨论】:

      【解决方案3】:

      I'm not sure if this is exactly what you're looking for,但您可以通过创建一个“配对”列表来简化它。

      E2:=COUNTIFS(A:A,$C2,B:B,$D2)

      E3:=COUNTIFS(A:A,$C3,B:B,$D3)

      ...

      E6:=SUM(E2:E5)

      好处是它很灵活 - 您可以在以后添加任意数量的配对。此外,没有复杂的数组公式。

      【讨论】:

        【解决方案4】:

        对于复杂的逻辑,使用更强大的命令,如queryfilter

        计算A列中“是”的行数,以及B列中“A”或“C”的行数。

        变成

        =query(A:C, "select count(A) where A='Yes' and (B='A' or B='C')")
        

        =query(A:C, "select count(A) where A='Yes' and (B='A' or B='C') label count(A) ''")
        

        如果您不想使用“count”等列标题。

        这几乎是用英语说明目标(嗯,它的 SQL 版本)。

        【讨论】:

        • 这个有趣的是我有一个单元格,上面写着“计数”,然后在它下面,一个单元格的结果是正确的 (4)。我只是在寻找 4。不过,真的,真的很接近!
        • 现在我得到了#VALUE!。直接复制粘贴,使用A:CA:B 得到相同的结果。
        【解决方案5】:

        简化:

        • 创建一个列 C,如果 B 是 A 或 C,则为 TRUE,否则为 FALSE。

          创建一个列 D,如果 B 是 I 或 X,则为 TRUE,否则为 FALSE。

          如果 A 为“是”且 C 为 TRUE,则创建一个为 TRUE 的列 E。

          如果 A 为“否”且 D 为 TRUE,则创建一个为 TRUE 的列 F

          创建一个 G 列,即 E 列或 F 列。

          总结 G 列中的值。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-10-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-08-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多