You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用VBA获取正确日期:解决Excel日期格式转换错误问题

解决VBA中CDate解析日期格式错误的问题

这问题我碰到过好多次啦——核心原因就是CDate是跟着系统区域设置来解析日期的。你的系统应该默认是MM/DD/YYYY的格式,所以它把01/02/2018当成了1月2日,但实际你要的是2月1日(也就是DD/MM/YYYY格式)。

给你两个靠谱的解决方案:

方法一:手动拆分日期组件(最稳妥)

直接把日期字符串拆成日、月、年,然后用DateSerial按正确顺序组合,完全不受系统区域影响:

Dim rawDateStr As String
Dim dayVal As Integer, monthVal As Integer, yearVal As Integer
Dim thedate As Date

rawDateStr = Application.Cells(linecount, 2).Value
' 拆分日期部分(先去掉时间,只处理前面的日期字符串)
Dim dateParts() As String
dateParts = Split(Split(rawDateStr, " ")(0), "/")

dayVal = CInt(dateParts(0))
monthVal = CInt(dateParts(1))
yearVal = CInt(dateParts(2))

' 按年、月、日的顺序构建正确日期
thedate = DateSerial(yearVal, monthVal, dayVal)

方法二:强制指定格式解析

如果你能确定单元格里的日期格式是固定的DD/MM/YYYY HH:MM:SS AM/PM,也可以用Format先标准化格式再转:

Dim rawDateStr As String
Dim thedate As Date

rawDateStr = Application.Cells(linecount, 2).Value
thedate = CDate(Format(rawDateStr, "dd/mm/yyyy hh:mm:ss AMPM"))

不过这个方法偶尔会因为系统区域的特殊设置出问题,所以更推荐第一种手动拆分的方式。

另外提一句:如果你的单元格本身是日期格式(不是文本),那直接取.Value得到的就是正确的日期序列号,根本不需要用CDate转——你可以先检查下单元格的格式是不是文本格式哦。

内容的提问来源于stack exchange,提问作者Anthony

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:12:31