Excel中AND公式未按预期工作:日期拼接值比较异常求助
问题根源:文本字符串 vs 数字比较
哦,这个坑我之前踩过!你得到FALSE的核心原因是:用&连接月份和年份后,生成的是文本字符串,Excel在比较时遵循的是文本排序规则,而不是数字大小规则。
为什么会这样?
你看,"72019"和"102019"作为文本比较时,Excel会从第一个字符开始逐个对比:
- 第一个字符
"7"的ASCII码值比"1"大,所以它会直接判定"72019">"102019",完全不会管后面的数字组合。这就是明明数字上72019更小,却返回FALSE的原因。
解决方法
方法1:将文本转换为数字比较
用VALUE()函数把连接后的字符串转成数字,让Excel按数字规则比较:
=AND(VALUE(MONTH(VLOOKUP(B25,'Liste-Stagiaire'!$1:$1048576,8,FALSE)) & YEAR(VLOOKUP(B25,'Liste-Stagiaire'!$1:$1048576,8,FALSE))) <= VALUE(MONTH(Octobre!$A$2) & YEAR(Octobre!$A$2)))
方法2:直接处理日期(更推荐)
拆分月份和年份再连接是绕远路,直接把日期转换为「当月第一天」来比较,逻辑更清晰,也避免文本比较的坑:
=AND(DATE(YEAR(VLOOKUP(B25,'Liste-Stagiaire'!$1:$1048576,8,FALSE)),MONTH(VLOOKUP(B25,'Liste-Stagiaire'!$1:$1048576,8,FALSE)),1) <= DATE(YEAR(Octobre!$A$2),MONTH(Octobre!$A$2),1))
如果你的Excel支持LET函数(365/2021及以上版本),还可以简化重复的VLOOKUP调用,让公式更易读:
=LET( stagiaireDate, VLOOKUP(B25,'Liste-Stagiaire'!$1:$1048576,8,FALSE), targetDate, Octobre!$A$2, DATE(YEAR(stagiaireDate),MONTH(stagiaireDate),1) <= DATE(YEAR(targetDate),MONTH(targetDate),1) )
内容的提问来源于stack exchange,提问作者TourEiffel
相关产品推荐
相关产品推荐

