为什么 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
尝试次数
成功使用单一条件
我想检查 colu1
和 colu2
是否都不为零。
检查单个列是否按预期工作。
左边是公式(公式自己“溢出”,我不用拖下来),右边是结果:
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))
问题
我在我的工作簿中广泛使用命名范围,但现在发现在 AND
函数的情况下,它们并不是常规范围的简单替代品。在这种情况下,公式不再 "spilled" 到后续行,并且只计算 1 个值。
我该如何解决该问题?
虚拟数据
这是我的虚拟数据:
colu1 | colu2 |
---|---|
3 | 0 |
0 | 2 |
1 | 9 |
2 | 1 |
尝试次数
成功使用单一条件
我想检查 colu1
和 colu2
是否都不为零。
检查单个列是否按预期工作。
左边是公式(公式自己“溢出”,我不用拖下来),右边是结果:
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))