我正在尝试通过ORing两个数组让Excel成为一个数组。例如,让两个数组A1:A3
为7
,8
,-3
和B1:B3
为4
,-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
的一个数组,并没有在单元格中定义(这太容易了)。
答案 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))}