Excel将mm/dd/yyyy日期转dd/mm/yyyy时单数字月日报#VALUE错误求解
报错原因
原公式报错的核心问题是截取“日”字段时硬编码了2位长度,完全没考虑月、日为个位数的短日期场景:
以9/1/2023为例,第一个/在第2位,从斜杠后一位(第3位)开始固定取2位,会把第二个/也截进来,拿到1/这种带非数字符号的文本,VALUE函数无法转成数值,自然返回#VALUE!错误。
解决方法
全版本兼容公式(所有Excel版本都能用)
不要硬编码截取长度,通过定位第二个斜杠的位置确定日字段的实际长度,不管月、日是1位还是2位都能正常识别:
=DATE( RIGHT(F47433,4), LEFT(F47433,FIND("/",F47433)-1), MID(F47433,FIND("/",F47433)+1,FIND("/",F47433,FIND("/",F47433)+1)-FIND("/",F47433)-1) )
如果你需要直接输出固定带前导零的dd/mm/yyyy格式文本(比如9月显示09、1号显示01),直接在外层套TEXT函数指定格式就行:
=TEXT( DATE( RIGHT(F47433,4), LEFT(F47433,FIND("/",F47433)-1), MID(F47433,FIND("/",F47433)+1,FIND("/",F47433,FIND("/",F47433)+1)-FIND("/",F47433)-1) ), "dd/mm/yyyy" )
这个公式对所有合法的mm/dd/yyyy格式文本都生效,包括12/31/2023、9/1/2023、10/5/2023、3/12/2023这类混合长度的日期,不会再报错。
高版本Excel简化写法(365/2021及以上版本支持)
如果你的Excel支持TEXTSPLIT函数,可以直接按斜杠拆分字符串取对应字段,逻辑更简单不容易写错:
=LET( split_arr,TEXTSPLIT(F47433,"/"), DATE(INDEX(split_arr,3),INDEX(split_arr,1),INDEX(split_arr,2)) )
要固定输出dd/mm/yyyy文本格式的话,同样套TEXT即可:
=LET( split_arr,TEXTSPLIT(F47433,"/"), TEXT(DATE(INDEX(split_arr,3),INDEX(split_arr,1),INDEX(split_arr,2)),"dd/mm/yyyy") )
用你举的9/1/2023测试,转换后可以正确得到2023年9月1日的日期值,套格式后直接返回01/09/2023,完全符合需求。
内容的提问来源于stack exchange,提问作者PythonBeginner
相关产品推荐
相关产品推荐

