如何让Google Sheets的AND函数对向量输入执行逐元素运算?
如何让Google Sheets的AND函数对向量输入逐索引执行运算?
当Google Sheets的AND函数接收两个向量输入时,如何强制它在每个标量索引上单独执行运算?如下面的示例所示,添加ARRAYFORMULA函数后,NOT函数表现符合预期,但AND函数却没有。
• 代码
| X1 | X2 | NOT(X1) | AND(X1,X2) | ARRAYFORMULA(NOT(X1)) | ARRAYFORMULA(AND(X1,X2)) | ||
|---|---|---|---|---|---|---|---|
| 1 | 3 | =NOT(A2:A6) | =AND(A2:A6,B2:B6) | =ARRAYFORMULA(NOT(A2:A6)) | =ARRAYFORMULA(AND(A2:A6,B2:B6)) | ||
| 2 | 4 | ||||||
| 3 | 5 | ||||||
| 4 | 6 | ||||||
| 5 | 7 |
• 结果
| X1 | X2 | NOT(X1) | AND(X1,X2) | ARRAYFORMULA(NOT(X1)) | ARRAYFORMULA(AND(X1,X2)) | ||
|---|---|---|---|---|---|---|---|
| 1 | 3 | FALSE | TRUE | FALSE | TRUE | ||
| 2 | 4 | FALSE | |||||
| 3 | 5 | FALSE | |||||
| 4 | 6 | FALSE | |||||
| 5 | 7 | FALSE |
解决方法
Google Sheets的AND函数本身不支持数组化运算,即便嵌套在ARRAYFORMULA中,也只会返回一个全局布尔值,不会逐元素计算。要实现逐索引的逻辑与运算,可用以下两种方法:
方法1:用乘法模拟逻辑与
在Google Sheets中,布尔值TRUE会被当作1,FALSE当作0。两个数组对应元素相乘,结果为1则表示两个值都为TRUE,0则表示至少一个为FALSE。通过--运算符可将数值转回布尔值:
=ARRAYFORMULA(--(A2:A6 * B2:B6))
也可直接判断乘积是否大于0,直接得到布尔结果:
=ARRAYFORMULA(A2:A6 * B2:B6 > 0)
方法2:用IF函数逐元素判断
通过IF函数逐个检查两个数组的对应元素,返回逻辑与的结果,还能处理空值场景:
=ARRAYFORMULA(IF((A2:A6 <> "") * (B2:B6 <> ""), A2:A6 * B2:B6 > 0, ""))
内容的提问来源于stack exchange,提问作者kando
相关产品推荐
相关产品推荐

