我试图通过ORing两个数组让Excel成为一个数组.作为一个例子,让两个数组A1:A3
是7
,8
,-3
和B1:B3
是4
,-8
,-8
.
这应该相当简单,但似乎是这样
OR ( A1:A3 > 0 ; B1:B3 > 0 )
Run Code Online (Sandbox Code Playgroud)
返回TRUE
而不是我期待的数组(TRUE, TRUE, FALSE)
.
当然我可以使用肮脏的技巧
(((A1:A3 > 0)*1 + (B1:B3 > 0)*1) >= 1) *1
Run Code Online (Sandbox Code Playgroud)
但谁愿意维持这一点呢?
此外,有可能搜索"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
并没有在单元格中定义(这太容易了).
bar*_*ini 20
你通常不能在"数组公式"中使用OR或AND,因为正如你在这里发现的那样,它们只返回一个结果(只有当所有条件都为TRUE时,AND为TRUE,OR为TRUE,任何为TRUE,如你所愿期待,所以在你的例子中,只要6个值中至少有一个是正数,你就会得到TRUE.
我会使用与你的建议类似的东西,使用+代替OR,虽然你不需要前两个*1,因为+ co-erces,所以这就足够了
=((A1:A3 > 0) + (B1:B3 > 0) >0) *1
虽然如果你有一个列可以是一个或另一个,那么这是相互排斥的,当然,也许这只需要
=(A1:A3="A")+(A1:A3="B")
小智 12
8年后...
=BITOR(A1:A3>0,B1:B3>0) for a 0 or 1 binary response
Run Code Online (Sandbox Code Playgroud)
或者
=BITOR(A1:A3>0,B1:B3>0)=1 for a FALSE or TRUE boolean response
Run Code Online (Sandbox Code Playgroud)
记住 CTRL+SHIFT+ENTER!
AND、OR 和 XOR 似乎对数组不友好,但 BITAND、BITOR 和 NOT 就可以了。要进行数组友好的 XOR,您需要将其分解为其他运算符,例如
=BITAND(BITOR(A1:A3,B1:B3),BITOR(NOT(A1:A3),NOT(B1:B3)))=1
Run Code Online (Sandbox Code Playgroud)
一个干净且相对简单的方法是使用嵌套的IF语句:
IF(A1:A3 > 0, TRUE, IF(B1:B3 > 0, TRUE, FALSE))
Run Code Online (Sandbox Code Playgroud)
如果A中的数字大于0,则返回TRUE,否则,如果B中的数字大于0,则返回TRUE,否则返回FALSE.
基本上你只是在编写自己的OR函数.你可以用AND做同样的事情.只要你有条件和缺点,你就可以用它们制造其他所有东西.