Google 按多个条件计算的工作表
Google Sheets counting with multiple criteria
我有一个 Google Sheet ,其中有几列数据,我想计算有多少行符合两个条件,其中一个条件与其中一个条件匹配两个值。
这是我拥有的数据示例:
我想做的是这样的事情:计算 A 列中有多少行“是”,B 列中有多少行是“A”或“C”。或者有多少行是“否”以及“I”或“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()
没有成功,也试过 curly-bracket 语法没有成功。我完全承认我可能做错了他们两个,但如果是这样,该死的,如果我能弄清楚我错过了什么。任何 Sheet 专家愿意同情一个老家伙并告诉我一个更聪明的方法来做到这一点?
I'm not sure if this is exactly what you're looking for,但您可以通过创建一个 "pairings" 列表来稍微简化它。
E2: =COUNTIFS(A:A,$C2,B:B,$D2)
E3: =COUNTIFS(A:A,$C3,B:B,$D3)
...
E6: =SUM(E2:E5)
好处是它很灵活 - 您以后可以根据需要添加任意数量的配对。此外,没有数组公式的复杂性。
简化:
创建一个列 C,如果 B 是 A 或 C,则该列为 TRUE,否则为 FALSE。
创建一个列 D,如果 B 是 I 或 X,则该列为 TRUE,否则为 FALSE。
如果 A 为 "yes" 并且 C 为 TRUE,则创建一个为 TRUE 的列 E。
如果 A 为 "no" 并且 D 为 TRUE
,则创建一个为 TRUE 的列 F
创建一个 G 列,即 E 列或 F 列。
对 G 列中的值求和。
对于复杂的逻辑,使用更强大的命令,如 query
or filter
。
count the rows with “Yes” in column A, and either “A” or “C” in column B.
变成
=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) ''")
如果您不想要 header 列,例如 "count"。
这几乎是用英语陈述目标(好吧,它的 SQL 版本)。
我会使用带有变量的查询。在 F1 中输入:
=query(A:B,"select count(A) where A ='"&C2&"' AND B='"&D2&"' OR A ='"&C2&"' AND B='"&E2&"'")
在 C2 中输入 "Yes" 或 "No",在 D2 和 E2 中输入 B 字母(或留空)。在 C1、D1 和 E1 中输入任何 headers。
到目前为止最短的一个:
=SUMPRODUCT(REGEXMATCH(A1:A8&B1:B8,"(?i)Yes(A|C)"))
使用 &
连接两列并在结果上使用 REGEX
。
(?i)
不区分大小写
yes(A|C)
是后跟 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
后不应有尾随空格,A
或 C
等前不应有前导空格。如果有,请使用 TRIM
.
我有一个 Google Sheet ,其中有几列数据,我想计算有多少行符合两个条件,其中一个条件与其中一个条件匹配两个值。
这是我拥有的数据示例:
我想做的是这样的事情:计算 A 列中有多少行“是”,B 列中有多少行是“A”或“C”。或者有多少行是“否”以及“I”或“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()
没有成功,也试过 curly-bracket 语法没有成功。我完全承认我可能做错了他们两个,但如果是这样,该死的,如果我能弄清楚我错过了什么。任何 Sheet 专家愿意同情一个老家伙并告诉我一个更聪明的方法来做到这一点?
I'm not sure if this is exactly what you're looking for,但您可以通过创建一个 "pairings" 列表来稍微简化它。
E2: =COUNTIFS(A:A,$C2,B:B,$D2)
E3: =COUNTIFS(A:A,$C3,B:B,$D3)
...
E6: =SUM(E2:E5)
好处是它很灵活 - 您以后可以根据需要添加任意数量的配对。此外,没有数组公式的复杂性。
简化:
创建一个列 C,如果 B 是 A 或 C,则该列为 TRUE,否则为 FALSE。
创建一个列 D,如果 B 是 I 或 X,则该列为 TRUE,否则为 FALSE。
如果 A 为 "yes" 并且 C 为 TRUE,则创建一个为 TRUE 的列 E。
如果 A 为 "no" 并且 D 为 TRUE
,则创建一个为 TRUE 的列 F创建一个 G 列,即 E 列或 F 列。
对 G 列中的值求和。
对于复杂的逻辑,使用更强大的命令,如 query
or filter
。
count the rows with “Yes” in column A, and either “A” or “C” in column B.
变成
=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) ''")
如果您不想要 header 列,例如 "count"。
这几乎是用英语陈述目标(好吧,它的 SQL 版本)。
我会使用带有变量的查询。在 F1 中输入:
=query(A:B,"select count(A) where A ='"&C2&"' AND B='"&D2&"' OR A ='"&C2&"' AND B='"&E2&"'")
在 C2 中输入 "Yes" 或 "No",在 D2 和 E2 中输入 B 字母(或留空)。在 C1、D1 和 E1 中输入任何 headers。
到目前为止最短的一个:
=SUMPRODUCT(REGEXMATCH(A1:A8&B1:B8,"(?i)Yes(A|C)"))
使用 &
连接两列并在结果上使用 REGEX
。
(?i)
不区分大小写yes(A|C)
是后跟 A 或 CSUM
全部为真。
对于复杂的条件,
=ARRAYFORMULA(SUM(--REGEXMATCH(A1:A8&B1:B8,"(?i)yes(A|C)"))&"/"&SUM(--REGEXMATCH(A1:A8&B1:B8,"(?i)no(I|X)")))
请注意,yes
/No
后不应有尾随空格,A
或 C
等前不应有前导空格。如果有,请使用 TRIM
.