Excel使用IF函数比较日期返回FALSE问题咨询
日期判断返回FALSE的核心原因
- 你写的第一个公式
=IF(AI14=31/12/9999;TRUE;FALSE)存在逻辑错误:未通过日期函数包裹的31/12/9999会被Excel识别为算术除法运算,即计算31÷12÷9999的数值结果,和9999年12月31日对应的日期序列号完全不匹配。 - 你写的第二个公式
=IF(AI14="31/12/9999";TRUE;FALSE)存在类型不匹配问题:加英文双引号的内容是文本字符串,而Excel原生日期以数值型序列号存储(1900日期系统下9999年12月31日对应的序列号为2958465),数值类型和文本类型直接对比必然返回FALSE。 - 数据透视表内的单元格确实可能引发判断异常:透视表值区域的计算结果受缓存浮点精度影响,很多时候单元格表面显示为
31/12/9999,但底层存储值和精确日期序列号存在极微小的差值,直接用等号做全等判断就会判定为不相等。
可直接复用的解决方案
- 基础正确写法:用
DATE()函数生成标准日期值作为判断依据,不要直接手写日期文本或除法表达式,公式如下(分号分隔符适配大部分非英文区域Excel版本):
=IF(AI14=DATE(9999;12;31);TRUE;FALSE)
- 适配透视表浮点误差的稳妥写法:通过计算两个日期的绝对差值,判断差值小于可忽略的精度阈值,规避浮点精度导致的判断失效:
=IF(ABS(AI14-DATE(9999;12;31))<0.00001;TRUE;FALSE)
- 如果AI14单元格内容是文本格式存储的日期,先通过
DATEVALUE()转成数值型日期序列号再对比:
=IF(DATEVALUE(AI14)=DATE(9999;12;31);TRUE;FALSE)
补充说明:
IF(判断条件;TRUE;FALSE)本身可以简化,直接返回判断逻辑的布尔值即可,比如最简写法可以写成=AI14=DATE(9999;12;31),不需要额外嵌套IF函数。
内容的提问来源于stack exchange,提问作者Guille Barroso
相关产品推荐
相关产品推荐

