Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 如何将逻辑OR应用于Excel中的数组_Arrays_Excel - Fatal编程技术网

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

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

我试图让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+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