为什么 AND 函数在使用命名范围时会将结果折叠成单个值?

Why does the AND function collapse the result into a single value when using named ranges?

问题

我在我的工作簿中广泛使用命名范围,但现在发现在 AND 函数的情况下,它们并不是常规范围的简单替代品。在这种情况下,公式不再 "spilled" 到后续行,并且只计算 1 个值。 我该如何解决该问题?

虚拟数据

这是我的虚拟数据:

colu1 colu2
3 0
0 2
1 9
2 1

尝试次数

成功使用单一条件

我想检查 colu1colu2 是否都不为零。 检查单个列是否按预期工作。

左边是公式(公式自己“溢出”,我不用拖下来),右边是结果:

colu1<>0? colu2<>0? colu1<>0? colu2<>0?
=IF(colu1<>0, 1, 0) =IF(colu2<>0, 1, 0) 1 0
(SPILLS) (SPILLS) 0 1
(SPILLS) (SPILLS) 1 1
(SPILLS) (SPILLS) 1 1

使用多个条件时失败

AND 公式中同时检查两列失败:

左侧的公式(在本例中,公式 不再“溢出”),右侧的结果:

both<>0? both<>0?
=IF(AND(colu1<>0, colu2<>0), 1, 0) 0
(NO SPILL) (EMPTY)
(NO SPILL) (EMPTY)
(NO SPILL) (EMPTY)

AND 采用数组输入并输出单一结果而不是数组。而是使用 *:

=IF((colu1<>0)*(colu2<>0), 1, 0)

或者如果您有 Excel 2013 或更高版本,您可以使用 BITAND():

=IF(BITAND(colu1<>0,colu2<>0),1,0)

但请注意,BITAND 需要两个且只有两个参数,并且不能使用更多参数。它在这种情况下有效,因为我们基本上是在比较 1 和 0。这不是在数组公式中使用 AND 的灵丹妙药。因此,最好的方法仍然是布尔值的乘法。

或跳过 IF: =(--(colu1*colu2<>0))