使用VBA将dd.mm.yyyy格式转换为UK日期格式的问题
解决VBA将点分隔日期转换为UK格式dd/mm/yyyy的问题
这个问题我之前也碰到过!核心原因是你直接替换符号后,VBA/Excel会跟着系统的区域设置来解析日期——如果你的系统默认是美式(mm/dd/yyyy),那01/02/2019就会被当成1月2日,而不是你想要的2月1日。给你几个靠谱的解决办法:
方法1:拆分日期字符串,手动重组正确日期
直接指定日、月、年的顺序,彻底避免系统自动识别出错,代码示例:
Sub ConvertToUKDate() Dim dateStrings As Variant Dim i As Integer Dim parts As Variant ' 你的原始日期数组 dateStrings = Array("01.01.2019", "01.02.2019", "01.03.2019", "14.03.2019") For i = LBound(dateStrings) To UBound(dateStrings) ' 按点拆分出日、月、年 parts = Split(dateStrings(i), ".") ' 用DateSerial生成正确日期(参数顺序:年, 月, 日) Dim convertedDate As Date convertedDate = DateSerial(CInt(parts(2)), CInt(parts(1)), CInt(parts(0))) ' 格式化为dd/mm/yyyy输出到调试窗口 Debug.Print Format(convertedDate, "dd/mm/yyyy") ' 如果要写入单元格,比如写入B列对应行 ' Cells(i+1, 2).Value = convertedDate ' Cells(i+1, 2).NumberFormat = "dd/mm/yyyy" Next i End Sub
方法2:批量处理单元格中的日期文本
如果你的日期是Excel单元格里的文本,用TextToColumns功能强制按DMY格式解析,再设置显示格式:
Sub FormatCellsToUKDate() Dim targetRange As Range ' 假设日期在Sheet1的A1:A4区域,可根据实际调整 Set targetRange = ThisWorkbook.Sheets("Sheet1").Range("A1:A4") ' 用TextToColumns拆分并指定日期格式为日-月-年 targetRange.TextToColumns _ Destination:=targetRange, _ DataType:=xlDelimited, _ Other:=True, _ OtherChar:=".", _ FieldInfo:=Array(1, xlDMYFormat) ' xlDMYFormat强制按日-月-年解析 ' 设置单元格显示格式为dd/mm/yyyy targetRange.NumberFormat = "dd/mm/yyyy" End Sub
方法3:直接转换并强制格式化(依赖区域设置)
如果不想拆分字符串,也可以先替换符号再转换,但需要确保系统能识别正确顺序,代码示例:
Sub DirectConvertWithFormat() Dim originalDate As String originalDate = "01.02.2019" ' 替换点为斜杠后,用DateValue转换为日期 Dim convertedDate As Date convertedDate = DateValue(Replace(originalDate, ".", "/")) ' 强制格式化为dd/mm/yyyy Debug.Print Format(convertedDate, "dd/mm/yyyy") End Sub
注意:这个方法依赖系统区域设置,如果系统默认是美式日期,可能还是会出错,所以更推荐前两种方法。
内容的提问来源于stack exchange,提问作者bd528
相关产品推荐
相关产品推荐

