关于RANK.EQ与RANK.AVG函数将FALSE识别为0的Bug问询
RANK.EQ/RANK.AVG 误将FALSE识别为0的Bug及替代解决方案
问题说明
RANK.EQ和RANK.AVG存在同一个恼人的Bug:会把逻辑值FALSE误判为0值- 当数据范围里没有0值时,函数查找FALSE会正常返回
#N/A - 一旦数据范围包含0值,函数就会把FALSE当作0来计算排名,返回完全不符合预期的结果
- 当数据范围里没有0值时,函数查找FALSE会正常返回
可行解决方案
除了读取返回数组再替换对应结果的方法,还有这些更直接的方案:
- 预处理数据(辅助列法)
新增一列辅助数据,把原数据中的FALSE替换为非数值,比如用公式:=IF(A1=FALSE,NA(),A1),之后直接对辅助列使用排名函数即可。 - 在排名函数中嵌入逻辑判断
以RANK.EQ为例,修改公式为:=IF(ISLOGICAL(A1),NA(),RANK.EQ(A1,IF(ISLOGICAL(B:B),NA(),B:B)))
这个公式先检查目标单元格是否为逻辑值,是则返回#N/A;同时对排名范围做同样过滤,彻底排除FALSE的干扰。 - 使用动态数组函数(适用于Excel 365及以上)
用FILTER先过滤掉数据范围里的逻辑值,再进行排名:=RANK.EQ(A1,FILTER(B:B,NOT(ISLOGICAL(B:B))))
这种方法不需要额外辅助列,一步完成过滤和排名。
内容的提问来源于stack exchange,提问作者vsoler
相关产品推荐
相关产品推荐

