【问题标题】:COUNTIF with a positive and negative criteria带有正负标准的 COUNTIF
【发布时间】:2016-02-09 22:21:11
【问题描述】:

我需要计算“列表 A”中的单元格出现在 D 列中包含的一组值中的单元格数量并且“列表 B”中的单元格未出现在列中E.

我正在尝试使用类似以下数组公式的方法,但到目前为止效果有限:

={SUM(COUNTIFS(A2:A21,D2:D5,B2:B21,"<>"&E2:E3))}

请注意,此示例中包含的数据与我的真实表中的数据不同。实际的表比这张表更长,也更复杂。

有什么建议吗?

【问题讨论】:

  • 在这种情况下,最好“展示你的工作”,并为中间列使用一些额外的列。我不喜欢精心设计的 COUNTIFS。
  • countif 使用“OR”,这意味着:计算 B2:B21 中的每个值,这至少是 E2:E4 中的任何一个(这对所有数字都有效……但您可以使用这个非数组公式:=SUMPRODUCT(COUNTIF(D2:D5,A2:A21)*(COUNTIF(E2:E5,B2:B21)-1))*-1
  • Dirk Reichel,这个公式效果很好——但我不太明白为什么。其次,例如,如果在 C 列中有第三个列表具有“真或假”值,并且单元格必须为“真” - 这是否符合您的建议?
  • 当然...虽然这个公式对您来说可能更容易理解:=SUMPRODUCT(COUNTIF(D2:D5,A2:A21)*NOT(COUNTIF(E2:E5,B2:B21)))...可以添加第三列,因为需要设置规则...我会写一个答案展示如何
  • 对不起,这是我的错误 - 我现在已经更正了。感谢您的关注

标签: excel excel-formula countif


【解决方案1】:

仅以您的示例为例,我评论中的公式就足够了

=SUMPRODUCT(COUNTIF(D2:D5,A2:A21)*NOT(COUNTIF(E2:E5,B2:B21)))

如果您有多个要排除的值,就会出现问题。那么你需要使用负数

=SUMPRODUCT(1*NOT(COUNTIF(E2:E5,B2:B21)))

这将计算包含排除列表中任何内容的所有行。但是 sumproduct 中的 NOT 会将其切换为相反的(需要 1* ,因为它只包含无法计数的 bool)

如果您的 C 列带有 bool(true/false 或 1/0),您可以简单地添加:

=SUMPRODUCT(COUNTIF(D2:D5,A2:A21)*NOT(COUNTIF(E2:E5,B2:B21))*C2:C21)

或者(C2:C21&gt;12),如果这是你需要的......但你也可以将它包含到包含列表中(如果 A 是 A/B/E/F 并且 C 是(2/4/6)

=SUMPRODUCT(COUNTIFS(D2:D5,A2:A21,F2:F5,C2:C21)*NOT(COUNTIF(E2:E5,B2:B21)))

但每个排除都需要自己的计数(B 不是 X/Y,C 不是 8/9/11)

=SUMPRODUCT(COUNTIFS(D2:D5,A2:A21)*NOT(COUNTIF(E2:E5,B2:B21))*NOT(COUNTIF(F2:F5,C2:C21))

如前所述:返回 "" 的公式可能会返回错误计数(请记住这一点)

【讨论】:

  • 请注意,如果以下两种情况都为真,您的公式可能会失败:1) 作为 COUNTIF 的范围参数传递的一个或多个范围包括空单元格,并且 2) 传递的范围内可能存在空单元格作为标准参数,而我发布的 MATCH 设置不受此类情况的影响。 1) 似乎是正确的,因为 OP 在 E2:E4 范围内包含空单元格(E4 目前至少是空的),因此,尽管目前 B2:B21 范围内没有空单元格(所以那 2) 当前是错误的),如果这种情况发生变化,那么您的公式将失败。
  • 我已经运行了几次测试,没有出现任何错误...你能给我举个例子让我得到错误吗?如果我包含空单元格,如果在 A 列和 B 列中的空单元格算作不排除,则它们不会被计算在内......两者都丢失不会计算在内......我真的不明白:(
  • 道歉。我应该澄清它以空字符串失败,而不是“真正”的空单元格。因此,例如,在 E3 和 E4 为空白的情况下,如 OP 的原始示例中所示,使 B2:B21 范围内的某些单元格返回空字符串“”。
  • 是的,="" 会引发错误...(因为它会出现很多次)我会将其包含在我的答案中
  • 确实如此。讨厌的小东西!实际上,如果此类字符串可能在 D2:E5 范围内(尽管不在 A2:B21 中),我的设置将失败。我没有任何依据可以假设 D2:E5 中的那些是“真正的”空白,而 A2:B21 中的那些可能是空字符串。
【解决方案2】:

在这种情况下最好切换到SUMPRODUCT

=SUMPRODUCT(0+ISNUMBER(MATCH(A2:A21,D2:D5,0)),1-ISNUMBER(MATCH(B2:B21,E2:E5,0)))

问候

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-12
    • 2020-08-15
    相关资源
    最近更新 更多