arrays - 如何在只有某些条件需要为 TRUE 的数组公式中包含 OR - Excel 第 3 部分

标签 arrays excel if-statement count countif

这是关于如何根据多个条件计算矩阵中的条目的一系列问题的第三部分也是最后一部分,只有其中一些条件需要为真才能符合条件(Part 1),以及在处理非顺序列时( Part 2)。

您可以在当前环境之外应用一些创造性的解决方案,并在此过程中建立一些奇妙的友情。

最后一步就是这个。取以下矩阵:

A B C D E F G H
4 2 2 2 1 4 2 4
  5 2 1 3 4   1
3 2 1     1 1 3
1 2 3 5 3 2 2 2
3 3 1 2 2 2 2 2

目标是计算满足以下条件的行数:
  • 它们包含 A:C 和 F:H 列的条目(因此应忽略第 2 行。注意第 3 行在 D 和 E 列中缺少条目,但这无关紧要)。
  • 它们在 A:C 列中包含满足至少一个特定类别标准的条目(例如,A 列 = >2、B 列标准 = >2 或 C 列 = <2),以及
  • 它们在 F:H 列中包含不符合以下任何条件的条目:F 列标准 = >2、G 列 = >2 和 H 列 = <2。注意。虽然条件 2 和 3 之间的标准值相同,但它们可能会有所不同,因此代码应该足够灵活以应对这种情况)。

  • 当前矩阵的答案是 2,因为第 3 行和第 5 行都具有相关列(A:C 和 F:G)的完整数据,并且它们至少满足 A:C 列的标准之一(例如,A3 (3) 和 C3 (1) 在第 3 行,A5 (3)、B5 (3) 和 C5 (1) 在第 5 行) 不符合 F:G 列的任何标准。

    我强烈建议查看 XOR LX's creative approach到问题(只有一组标准和顺序列),以及 Tom Sharpe's excellent progression (对于非顺序列,但仍然是一组标准),尤其是因为您可以保证从他们的独创性中学到一些东西。

    我将更新问题标题名称以反射(reflect)每种情况下的最佳解决方案。

    非常感谢,让游戏开始吧!

    最佳答案

    这一次,您有复杂的条件,不能像以前那样将其分解到计数中,并且必须逐行评估。我建议常识最终必须占上风,而不是一个宏伟的数组公式,我会提出三个辅助列:

    (1) 检查前三列是否为非空白(在第一列):

    =COUNTIFS(A1,"<>",B1,"<>",C1,"<>")
    

    (2)检查前三列是否满足所有逆标准(在col J中):
    =COUNTIFS(A1,"<=2",B1,"<=2",C1,">=2")
    

    (3) 检查最后三列是否也满足所有逆标准(在 col K 中):
    =COUNTIFS(F1,"<=2",G1,"<=2",H1,">=2")
    

    我们想要的结果是 (1) 为真、(2) 为假且 (3) 为真的行(在 col M 中):
    =SUMPRODUCT(I1:I5,1-J1:J5,K1:K5)
    

    这是用于比较的传统数组公式方法:
    =SUMPRODUCT((A1:A5<>"")*(B1:B5<>"")*(C1:C5<>"")*(F1:F5<>"")*(G1:G5<>"")*(H1:H5<>"")*SIGN((A1:A5>2)+(B1:B5>2)+(C1:C5<2))*(F1:F5<=2)*(G1:G5<=2)*(H1:H5>=2))
    

    (这里我们必须测试每一列都是非空白的,因为空白被视为零并且会错误地满足某些标准。异常(exception)是列 H,因为我们已经检查它是否 >= 2,因此可以省略) .

    在可能的情况下使用 Countifs 可能有一些优势,因为您可以在测试标准的同时排除空白。至少对于最后三列是正确的,但对于前三列则不然,结果为零可能意味着并非所有逆标准都得到满足(因此至少有一个原始标准),或者存在这些列中的空白。

    enter image description here

    关于arrays - 如何在只有某些条件需要为 TRUE 的数组公式中包含 OR - Excel 第 3 部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53505985/

    相关文章:

    javascript - 根据现有对象数组的几个属性返回新的对象数组

    javascript - 为什么 JavaScript 会有这样的行为?

    vba - 循环中的自动过滤器第一次运行缓慢,然后快速运行?

    JavaScript/jQuery "if"条件语法

    c - (c) 表达式必须是可修改的左值

    c++ - 带有 char 值的 if 语句

    python - Numpy 产生错误的值

    使用日志函数(没有 math.h)和数组计算 C 中的字母表

    java - 使用 Apache POI 在 Excel 中生成下拉列表时是否有最大项目数?

    excel - 将 sum 与 timevalue 函数相结合