Excel IF函数逻辑测试返回False却输出True结果的问题
问题分析与解决
1. DATE函数参数完全写反了
你写的DATE(1900;31;12)和DATE(2099;31;12)犯了最基础的错误——Excel的DATE函数参数顺序是年、月、日,不是年、日、月。
- 你输入的
DATE(1900;31;12)里,31当月份用是无效值,Excel会自动换算:31个月等于2年7个月,实际得到的是1902年7月12日,根本不是你要的1900年12月31日。 - 同理
DATE(2099;31;12)里的31个月会被转换成2年7个月,算出来是2101年7月12日,你说的解析成1905完全是参数顺序错误导致的计算混乱,和日期范围限制没关系。
2. 公式逻辑与序列号用错了
你要判断的是“早于1901年”或“晚于2098年”,但原公式的第一个条件因为DATE参数错误,变成了判断日期是否≤1902年7月12日,范围比你需求的大太多。
另外你用的72000这个序列号也不对:在Excel默认的1900日期系统里,2098年12月31日对应的序列号是72086,72000对应的是2098年10月14日,用W88>=72000会把2098年10月中旬之后的日期都判为无效,和你“晚于2098年”的需求不符。
至于你说的“有效日期逻辑测试显示False却输出Not Valid”,大概率是W88单元格是文本格式,不是真正的日期值。文本和数值比较时,Excel会尝试把文本转数值,转换失败的话会判定文本比任何数值都大,所以W88>=72000会返回True,触发OR条件输出Not Valid。
修正后的正确公式
把DATE参数改对,用明确的日期边界,同时确保W88是日期格式:
=IF(OR(W88<DATE(1901,1,1),W88>DATE(2098,12,31)),"Not Valid","")
W88<DATE(1901,1,1):判断是否早于1901年1月1日W88>DATE(2098,12,31):判断是否晚于2098年12月31日- 分隔符用逗号还是分号看你Excel的区域设置,两者都有效
额外要检查的点
- 右键W88单元格→设置单元格格式→选“日期”,确保单元格存的是日期值,不是文本。
- 如果你用的是Mac版Excel(默认1904日期系统),别用固定序列号(比如72000),直接用DATE函数指定边界最靠谱。
内容的提问来源于stack exchange,提问作者Vincenzo
相关产品推荐
相关产品推荐

