如何逐行评估 COUNTIFS (或类似)中的多个 OR 条件?

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。

我找到了一个使用概率加法定理的有效解决方案(请参阅我的答案),但如果可能的话,我想要一种更易于阅读和扩展的方法来做到这一点。我怎样才能实现这个目标?

Mát*_*ász 6

在 Excel 365 中,您可以使用 FILTER 函数:

=COUNT(FILTER(A1:A5,(A1:A5<5) + (B1:B5<5)))

用 * 分隔条件将充当 AND,而用 + 分隔它们将充当 OR。

  • 我喜欢这个,因为它可以在整个列范围(例如 A:A)上使用,而无需考虑标题或空白,可以轻松扩展到更多列,并且可以与字符串比较 `=COUNT(FILTER(A: A,(A:A&lt;5) + (B:B&lt;5) + (C:C="测试")))`。 (3认同)

phu*_*clv 5

数学上x OR y相当于x + y >= 1x 和 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)