选择具有多列的范围时,Countifs 不起作用

Posted

技术标签:

【中文标题】选择具有多列的范围时,Countifs 不起作用【英文标题】:Countifs does not work when a range with multiple column is selected 【发布时间】:2019-04-08 12:22:15 【问题描述】:

我需要一个 count if 函数来计算满足特定条件的单元格。这应该通过计数来完成。公式如下: =COUNTIFS(Orders!D:D;"*Ecolab*";Orders!B:B;">=01/01/2019";Orders!U:U;">=36";Orders!K:Q;">=1")这个公式返回值类型错误。

在我引入最后一个条件orders!K:Q;">=1"之前,这个公式很有效 我想要一个计算单元格中是否存在 Ecolab 一词的公式;如果日期晚于或等于 2019 年 1 月 1 日;如果 U 列大于或等于数字 36,并且从 K 列到 Q 列的行中的单元格中至少有一个“1”。我可以通过轻松复制 countifs 几次来做到这一点,(即@ 987654323@ 但我宁愿不包含这么长的公式,因为它会给 Excel 表格的最终用户造成混乱

【问题讨论】:

COUNTIFS 仅适用于大小和形状相同的范围。您必须使用 SUMPRODUCT 之类的其他函数,或者使用带有 OFFSET 的列偏移数组作为最后一个范围。 你是说如果 K1 和 M1 都大于 1 那么第 1 行的计数应该是 2? 【参考方案1】:

根据我上面的评论,您可以使用 SUMPRODUCT(避免为此使用整列)或带有 OFFSET 的数组,如下所示:

=SUM(COUNTIFS(Orders!D:D;"*Ecolab*";Orders!B:B;">=01/01/2019";Orders!U:U;">=36";OFFSET(Orders!J:J;0;1;2;3;4;5;6;7);">=1"))

【讨论】:

是的,这与 OP 建议他/她可以使用的多个 COUNTIF 结果相同。如果这不是预期的结果,那么 OP 需要澄清...... 如果K1、L1、M1、N1、O1、P1和Q1都>=1,那那一行不是算了7次吗? @user11314630 再次,是的 - 请参阅我上面的评论。【参考方案2】:

如果单行中可能有多个大于或等于 1 的单元格时 K:Q 的计数应为 1,那么您需要在 SUMPRODUCT 中应用 OR 条件。

SUMPRODUCT 公式不应使用完整的列引用;有太多浪费的计算。以下是第 2:99 行;调整以供自己使用。

=SUMPRODUCT(--ISNUMBER(SEARCH("ecolab", Orders!D2:D99)),
            --(Orders!B2:B99>=DATE(2019, 1, 1)),
            --(Orders!U2:U99>=36),
            SIGN((Orders!K2:K99>=1)+(Orders!L2:L99>=1)+(Orders!M2:M99>=1)+(Orders!N2:N99>=1)+(Orders!O2:O99>=1)+(Orders!P2:P99>=1)+(Orders!Q2:Q99>=1)))

【讨论】:

短一点是:=SUMPRODUCT(ISNUMBER(SEARCH("ecolab", Orders!D2:D99))*(Orders!B2:B99>=DATE(2019, 1, 1))*(Orders!U2:U99>=36)*(K2:Q99>=1)) 这也会产生填充结果。使用 SIGN 将任何数字从 1 到 7 转换回 1 是我所知道的 SUMPRODUCT OR 语句的最佳方法。好吧,要么 SIGN 要么集体大于 0。

以上是关于选择具有多列的范围时,Countifs 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

当值最初在范围内设置时,日期选择器弹出格式不起作用

mysql 多列索引不起作用(如预期的那样)?

为啥我的 Pandas 引用多个列的“应用”函数不起作用? [关闭]

在 knexjs mysql 中取联合多列后总和不起作用

具有小数/浮点比较的 sqlite 选择查询不起作用

使用间接引用时,动态命名范围不起作用