Dra*_*ake 4 worksheet-function microsoft-excel countif
考虑以下示例数据。
A | 乙 |
---|---|
1 | 2 |
8 | 4 |
2 | 1 |
3 | 7 |
4 | 8 |
分别来说,A小于5的个数为=COUNTIF(A1:A5, "<5")
->4,B的个数为=COUNTIF(B1:B5, "<5")
->3。
我知道如果我想要 A和B < 5的行数,我可以使用 COUNTIFS: =COUNTIFS(A1:A5, "<5", B1:B5, "<5")
-> 2 因为 COUNTIFS 逐行评估条件。但是,我无法找到一种优雅的方法来获取 A或B < 5的行数。
使用样本数据,答案应该是 5。到目前为止我已经尝试过:
=COUNTIF(A1:A5, "<5") + COUNTIF(B1:B5, "<5")
-> 7,因为单元格不被视为行。这仅计算 <5 的单元格数量。=SUM(IF(A1:A5 < 5, 1, 0), IF(B1:B5 < 5, 1, 0))
-> 7,与上面做同样的事情。=SUM(IF(OR(A1:A5 < 5, B1:B5 < 5), 1, 0))
-> 1,因为单元格不被视为行,并且 OR 仅返回一个组合每个单元格条件的结果的值。如果任何单元格 <5,则计算结果为 1;如果没有单元格 <5,则计算结果为 0。我找到了一个使用概率加法定理的有效解决方案(请参阅我的答案),但如果可能的话,我想要一种更易于阅读和扩展的方法来做到这一点。我怎样才能实现这个目标?
在 Excel 365 中,您可以使用 FILTER 函数:
=COUNT(FILTER(A1:A5,(A1:A5<5) + (B1:B5<5)))
用 * 分隔条件将充当 AND,而用 + 分隔它们将充当 OR。
数学上x OR y
相当于x + y >= 1
x 和 y 是布尔值。在 Excel 中,我们通常使用 来从 bool 转换为 int --
。所以下面的任何一个都可以工作
=SUM(--(IF(A1:A5 < 5, 1, 0) + IF(B1:B5 < 5, 1, 0) > 0))
=SUM(--(--(A1:A5 < 5) + --(B1:B5 < 5) > 0))
Run Code Online (Sandbox Code Playgroud)
它甚至可以缩短为
=SUM(--(-(A1:A5 < 5) + -(B1:B5 < 5) < 0))
=SUM(--(-(A1:A5 < 5) - (B1:B5 < 5) < 0))
Run Code Online (Sandbox Code Playgroud)