Arrays 如何将逻辑OR应用于Excel中的数组
我试图让Excel通过对两个数组进行ORing来生成一个数组。例如,让两个数组Arrays 如何将逻辑OR应用于Excel中的数组,arrays,excel,Arrays,Excel,我试图让Excel通过对两个数组进行ORing来生成一个数组。例如,让两个数组A1:A3成为7,8,-3和B1:B3成为4,-8,-8 这应该相当简单,但似乎 OR ( A1:A3 > 0 ; B1:B3 > 0 ) 返回TRUE而不是我期望的数组(真、真、假) 当然,我可以用一个肮脏的把戏,比如 (((A1:A3 > 0)*1 + (B1:B3 > 0)*1) >= 1) *1 但谁会愿意维持这一点呢 另外,可能有一些东西可以搜索“CSE(Ctrl+Shift
A1:A3
成为7
,8
,-3
和B1:B3
成为4
,-8
,-8
这应该相当简单,但似乎
OR ( A1:A3 > 0 ; B1:B3 > 0 )
返回TRUE
而不是我期望的数组(真、真、假)
当然,我可以用一个肮脏的把戏,比如
(((A1:A3 > 0)*1 + (B1:B3 > 0)*1) >= 1) *1
但谁会愿意维持这一点呢
另外,可能有一些东西可以搜索“CSE(Ctrl+Shift+Enter)公式”(Formulas),但它看起来真的像是黑魔法
我错过了一些简单的东西吗
对于那些好奇的人来说,我试图建立的实际公式当然要复杂一些。它试图(通过
SUMPRODUCT
)计算(状态==A或状态==B)和日期=某些单元格的所有行。我正在寻找的OR只是我的SUMPRODUCT
的一个数组,没有在单元格中定义(这太容易了)。通常不能在“数组公式”中使用OR和,因为正如您在这里发现的,它们只返回一个结果(并且只有当所有条件都为真时才为真,或者如您所期望的,当任何条件都为真时才为真,因此在您的示例中,只要6个值中至少有一个为正,您就会得到真)
我会使用与你的建议类似的东西,使用+来代替或有效地,尽管你不需要前两个*1,因为+的原因,所以这就足够了
=((A1:A3>0)+(B1:B3>0)>0)*1
虽然如果你有一个单列,它可以是一件事,也可以是另一件事,那肯定是相互排斥的,所以也许这只需要
=(A1:A3=“A”)+(A1:A3=“B”)
解决这一问题的一种干净且相对简单的方法是使用嵌套的IF语句:
IF(A1:A3 > 0, TRUE, IF(B1:B3 > 0, TRUE, FALSE))
如果A中的数字大于0,则返回TRUE;如果B中的数字大于0,则返回TRUE;否则返回FALSE
基本上你只是在写你自己的OR函数。你可以用AND做同样的事情。只要你有条件和NOT,你就可以用它们来做其他的事情。我为表中某些数据的中值做了一个数组公式。例如,在数据中有X、Y和Z组。我想得到两种类型的中值数据类型为X和Y,因此无法在数组中使用OR语句
我所做的是在原始数据集中创建一个新列。如果列a=X或a=Y,则显示“1”,如果不显示“0”
然后,我基于新列编写了数组公式,因为此列中的所有数据组都被重新分类为1或0,所以我不再需要数组中的or语句
这对我来说很有效,我可以轻松地将新数据复制并粘贴到原始表中,而不会弄乱这个新的IF语句,因此易于更新。您可以对数组结果使用IF
函数,它将为您提供一系列1和0作为或。例如:
IF(((A1:A3>0)+(B1:B3>0)),1,0)
我发现这是最简单的方法。我同意@barry houdini的观点,但我也想指出,不管这些列是相同的还是不同的。+或*将为或/和解决它
至或:
=(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))}
8年后
或
记住CTRL+SHIFT+ENTER
看起来AND、OR和XOR对数组不友好,但BITAND、BITOR和not很好。
要做一个数组友好的异或,你需要把它分解成其他操作符,例如
=BITAND(BITOR(A1:A3,B1:B3),BITOR(NOT(A1:A3),NOT(B1:B3)))=1
谢谢你的解释。不过还是希望有一个“更干净”的公式。可能取决于你对“更干净”的定义……但我怀疑没有更优雅的方式……也许使用IF函数更透明,例如,=IF(A1:A3>0,1,IF(B1:B3>0,1,0),0)
……但是你必须“array enter”即使在SUMPRODUCTI中,我也发现这些文章很有帮助:并且刚刚验证了在SUMPRODUCT
(这是@PPC声明的最终目标)中,您甚至不需要1乘1的技巧,结果已经显示为1和0的数组。这是尽可能干净的。。。
=BITOR(A1:A3>0,B1:B3>0)=1 for a FALSE or TRUE boolean response
=BITAND(BITOR(A1:A3,B1:B3),BITOR(NOT(A1:A3),NOT(B1:B3)))=1