我正在尝试实现一些我知道必须简单的事情,但我还没有成功找到解决方案。我的问题很简单。我试图在一个简单的表格中计算每列下“坏”或“好”的出现次数,但只计算一次:
例如,无论 A 列下出现多少次“Bad”,A 列下的“Bad”值都应仅计算一次。
我最接近实现这一结果的一次是
=COUNTIF(G2:G9,UNIQUE(FILTER(G2:G9,G2:G9="Bad"),,TRUE))
此公式实现了我在一列中处理混合字符串的目标。它将正确地仅计算“坏”
但如果出现多次“Bad”则错误地返回以下值0
:
TRUE
从公式中删除,最终=COUNTIF(G2:G9,UNIQUE(FILTER(G2:G9,G2:G9="Bad")))
问题不但没有解决,反而引入了一个新问题,即对字符串“Bad”的多次出现进行计数:
有人可以告诉我我做错了什么,或者我想要做的事情是否有可能吗?
答案1
答案2
您的 OP 中列出的公式不起作用,原因如下:
对于使用方法:
=COUNTIF(G2:G9,UNIQUE(FILTER(G2:G9,G2:G9="Bad"),,1))
- 使用:从范围
FILTER(G2:G9,G2:G9="Bad")
返回两次。Bad
- 使用
UNIQUE()
:在UNIQUE()
上面的公式中包装函数时返回#VALUE!
错误,这是因为所述函数中使用的最后一个参数是返回TRUE -- Return items that appear exactly once
两个相似的值。边注:-->TRUE
and 的1
意思是相同,并且O
andFALSE
指的是相同。 - 使用:用它
COUNTIF()
包装时会返回,因为您试图在范围内找到错误,因此输出为。COUNTIF()
0
#VALUE!
0
- 使用不带
TRUE
:它返回,2
因为它将值与范围相匹配,因为使用返回的数组FILTER()
显示{"Bad";"Bad"}
在包装时UNIQUE()
它只返回一个Bad
作为在范围内查找的条件G2:G9
。
建议使用以下公式,该公式将根据要求发挥作用:
单元格中使用的公式G3
=SUM(N(UNIQUE(FILTER(G2:G9,1-ISNA(XMATCH(G2:G9,{"Bad","Good"}))))<>""))
在上面的公式中,我同时包含了标准Bad
和Good
以返回所需的输出。但是,如果只Bad
需要,那么
=SUM(N(UNIQUE(FILTER(G2:G9,G2:G9="Bad"))<>""))
另一种替代方法是使用:
=COUNTA(UNIQUE(FILTER(G2:G9,G2:G9="Bad")))
或者,这个也会更短一些:
对于Good
和Bad
=SUM(N(UNIQUE(G2:G9)={"Bad","Good"}))
仅限Bad
=SUM(N(UNIQUE(G2:G9)="Bad"))
或者对整个范围使用LAMBDA()
辅助函数BYCOL()
对于Good
和Bad
=BYCOL(G2:K9,LAMBDA(α, SUM(N(UNIQUE(α)={"Bad","Good"}))))
仅限Bad
=BYCOL(G2:K9,LAMBDA(α, SUM(N(UNIQUE(α)="Bad"))))