使用ALS(IF)函数比较日期返回异常结果的原因排查
原Excel函数异常原因分析
问题场景
需要将格式为「日-月-年 时分」(如19-09-2024 06:45)的日期数据,划分为2024-06-21之前和之后两类。
异常现象
最初使用荷兰语Excel函数:
=ALS(TEKST(W2;"dd-mm-jjjj")<"21-06-2024";"1";"2")
出现逻辑错误:例如19-09-2024明明在2024-06-21之后,却返回了代表“之前”的1,实际仅对比了日期的“日”部分。
核心原因
- 字符串对比的逐位特性:
TEKST(W2;"dd-mm-jjjj")将日期单元格转换为文本字符串,而Excel对字符串的比较是按字符顺序逐位判断的。- 以
19-09-2024和21-06-2024为例,首先对比第一个字符:1的ASCII码小于2,Excel直接判定整个字符串更小,不会继续对比后续的月份、年份部分,因此得出错误结论。
- 以
- 日期数值对比的正确性:修改后的函数
=ALS(C2<DATUMWAARDE("21-6-2024");"1";"2"),是将单元格的日期值与DATUMWAARDE生成的日期序列化数值做对比。Excel中所有日期本质是对应特定顺序的数字(比如2024-06-21对应一个固定的数字),数字对比会遵循实际的日期先后逻辑,因此能得到正确结果。
内容的提问来源于stack exchange,提问作者DutchArjo
相关产品推荐
相关产品推荐

