【问题标题】:How to apply a logical OR to an array in Excel如何将逻辑或应用于 Excel 中的数组
【发布时间】:2012-04-12 19:41:43
【问题描述】:

我试图让 Excel 通过 ORing 两个数组来使我成为一个数组。例如,让两个数组A1:A378-3B1:B34-8-8

这应该相当简单,但似乎

OR ( A1:A3 > 0 ; B1:B3 > 0 )

返回TRUE,而不是我期待的数组(TRUE, TRUE, FALSE)

当然,我可以使用像这样的肮脏把戏

(((A1:A3 > 0)*1 + (B1:B3 > 0)*1) >= 1) *1

但谁愿意维护它呢?

此外,在“CSE (Ctrl+Shift+Enter) 公式”(http://www.mrexcel.com/articles/CSE-array-formulas-excel.php) 周围可能有一些东西要搜索,但是它真的看起来像黑魔法。

我错过了一些简单的事情吗?

对于那些对此感到好奇的人,我正在尝试构建的实际公式当然要复杂一些。它试图计算(通过SUMPRODUCT(status == A OR status == B) AND Date = some cell 所在的所有行。我正在寻找的 OR 只是我的 SUMPRODUCT 的一个数组,并且没有在单元格中定义(这太容易了)。

【问题讨论】:

    标签: arrays excel


    【解决方案1】:

    您通常不能在“数组公式”中使用 OR 或 AND,因为正如您在此处发现的那样,它们仅返回单个结果(AND 仅在所有条件为 TRUE 时为 TRUE,OR 为 TRUE 是任何为 TRUE,如您所料,因此在您的示例中,只要 6 个值中的至少一个为正值,您就会得到 TRUE)。

    我会使用与您的建议类似的东西,有效地使用 + 代替 OR,尽管您不需要前两个 *1,因为 + 是 co-erces,所以这就足够了

    =((A1:A3 > 0) + (B1:B3 > 0) >0) *1

    虽然如果你有一个单独的列,它可以是一件事或另一件事,那么这是相互排斥的,当然,所以也许只需要

    =(A1:A3="A")+(A1:A3="B")

    【讨论】:

    • 感谢您的解释。尽管如此,仍然希望有一个“更清洁”的公式。
    • 可能取决于您对“更清洁”的定义......但我怀疑没有更优雅的方式......也许使用 IF 函数更透明,例如=IF(A1:A3>0,1,IF(B1:B3>0,1,0),0)......但你必须“输入数组”,即使在 SUMPRODUCT 中
    • 刚刚验证在SUMPRODUCT 内(@PPC 声明是最终目标),您甚至不需要乘以 1 的技巧,结果已经以 1 的数组形式出现和 0。这是尽可能干净的......
    【解决方案2】:

    一个干净且相对简单的方法是使用嵌套的 IF 语句:

    IF(A1:A3 > 0, TRUE, IF(B1:B3 > 0, TRUE, FALSE))
    

    如果 A 中的数字大于 0,则返回 TRUE,否则,如果 B 中的数字大于 0,则返回 TRUE,否则返回 FALSE。

    基本上,您只是在编写自己的 OR 函数。你可以用 AND 做同样的事情。只要你有条件和不,你可以用它们来做其他的事情。

    【讨论】:

      【解决方案3】:

      8 年后...

      =BITOR(A1:A3>0,B1:B3>0)      for a 0 or 1 binary response
      

      =BITOR(A1:A3>0,B1:B3>0)=1    for a FALSE or TRUE boolean response
      

      记住 CTRL+SHIFT+ENTER!

      似乎 AND、OR 和 XOR 对数组不友好,但 BITAND、BITOR 和 NOT 很好。 要进行数组友好的 XOR,您需要将其分解为其他运算符,例如

      =BITAND(BITOR(A1:A3,B1:B3),BITOR(NOT(A1:A3),NOT(B1:B3)))=1
      

      【讨论】:

      • 太棒了。我希望的超级简单的解决方案,谢谢。
      【解决方案4】:

      我为表格中某些数据的中位数做了一个数组公式。例如,数据中有 X、Y 和 Z 组。我想获得两种数据 X 和 Y 的中位数,因此无法在数组中使用 OR 语句。

      我所做的是在原始数据集中创建一个新列。 IF列A=X或A=Y,显示“1”,IF不显示“0”

      然后我根据新列编写了数组公式,由于该列中的所有数据组都被重新分类为 1 或 0,因此我不再需要数组中的 OR 语句。

      这对我有用,我可以轻松地将新数据复制并粘贴到原始表中,而不会弄乱这个新的 IF 语句,因此很容易更新。

      【讨论】:

        【解决方案5】:

        您可以将IF 函数与您的数组结果一起使用,它会为您提供一系列 1 和 0 作为 OR。例如:

        IF(((A1:A3>0)+(B1:B3>0)),1,0)
        

        我发现这是最简单的方法。

        【讨论】:

          【解决方案6】:

          我同意@barry houdini 的观点,但也想指出,列是否相同或不同并不重要。 + 或 * 将为 OR/AND 解决它

          到或:

          =(A1:A3="A")+(B1:B3="B")
          

          与:

          =(A1:A3="A")*(A1:A3="B")
          

          这是一个有效的示例公式

          ={MAX(IF((('Stock Statement Dec2019'!$A$2:$A$676=Synthesis!$A$12)*('Stock Statement Dec2019'!$B$2:$B$676=Synthesis!A13));'Stock Statement Dec2019'!$Q$2:$Q$676))}
          

          【讨论】:

            猜你喜欢
            • 2021-07-12
            • 1970-01-01
            • 1970-01-01
            • 2021-11-27
            • 2015-10-09
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-10-10
            相关资源
            最近更新 更多