如何将逻辑OR应用于Excel中的数组

时间:2012-04-12 19:41:44

标签: arrays excel

我正在尝试通过ORing两个数组让Excel成为一个数组。例如,让两个数组A1:A378-3B1:B34-8,{ {1}}。

这应该相当简单,但似乎

-8

返回OR ( A1:A3 > 0 ; B1:B3 > 0 ) 而不是我期待TRUE的数组。

当然我可以使用像

这样的肮脏技巧
(TRUE, TRUE, FALSE)

但是谁想要保持这个?

此外,可能会搜索“CSE( Ctrl + Shift + Enter )公式”(http://www.mrexcel.com/articles/CSE-array-formulas-excel.php )但它真的看起来像黑魔法。

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

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

6 个答案:

答案 0 :(得分:19)

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

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

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

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

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

答案 1 :(得分:5)

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

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

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

基本上你只是在编写自己的OR函数。你可以用AND做同样的事情。只要你有条件和缺点,你就可以用它们制造其他所有东西。

答案 2 :(得分:2)

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

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

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

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

答案 3 :(得分:1)

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 :(得分:0)

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

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

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

答案 5 :(得分:0)

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

致或:

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

致AND:

=(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))}