解析 Excel 单元格中的非标准日期格式

Parsing non-standard date format in Excel cell

我想将 "March 30th 2017, 05:00:00.000" 格式的日期转换为 excel 日期值?我可以使用单元格公式而不是 VBA 来做到这一点的最优雅的解决方案是什么?

如果您想要一个真实的日期并希望删除时间部分,那么:

=DATEVALUE(SUBSTITUTE(LEFT(A1,FIND(",",A1)-1),"th",","))

您将需要嵌套 SUBSTITUTE() 函数来处理 "nd" 和 "st" 序数(如果有):

=DATEVALUE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(LEFT(A1,FIND(",",A1)-1),"th",","),"nd",","),"st",","))

嵌套的 IFERROR 函数可以处理各种数字序数。

=--SUBSTITUTE(REPLACE(A2, IFERROR(FIND("st ", A2),IFERROR(FIND("nd ", A2),IFERROR(FIND("rd ", A2), IFERROR(FIND("th ", A2), LEN(A2))))), 3, ", "), ", ", " ",2)

我使用了 [Color10]mmmm dd, yyyy hh:mm:ss.000;;;[Color3]@ 的自定义数字格式。除了文本左对齐而真实日期右对齐之外,这会将看起来像日期的文本显示为红色字体,将真实日期显示为绿色字体。

这将符合标准 "rd","th","st","nd"

=--(LEFT(A1,MIN(FIND({"rd","th","st","nd"},A1 & "thrdstnd"))-1)& ", " & SUBSTITUTE(MID(A1, MIN(FIND({"rd","th","st","nd"},A1 & "thrdstnd"))+2,LEN(A1)),",",""))

您可以根据需要在公式中添加其他后缀

然后你可以随意格式化它。