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

如何在Excel VBA中将yy/mm/dd格式转换为dd/mm/yyyy格式?

解决Excel VBA批量转换日期格式(yy/mm/dd → dd/mm/yyyy)的方案

别担心,处理18000条日期数据的格式转换其实很简单,我给你准备了两个针对性的VBA方案,根据你的数据类型来选就行:


情况1:数据是真正的Excel日期值(只是显示格式为yy/mm/dd)

如果你的日期是Excel识别的日期值(比如选中单元格后,编辑栏里显示的是类似2023/10/05的完整日期),那直接批量设置单元格格式就搞定了,不用转换数值:

Sub ConvertDateFormat_TrueDates()
    ' 替换成你实际的日期数据范围,比如B2:B18001
    Dim targetRange As Range
    Set targetRange = ThisWorkbook.ActiveSheet.Range("A1:A18000")
    
    ' 直接设置显示格式为dd/mm/yyyy
    targetRange.NumberFormat = "dd/mm/yyyy"
End Sub

情况2:数据是文本格式的yy/mm/dd

如果你的日期是纯文本(比如编辑栏里显示的就是23/10/05,Excel没识别成日期),就得先把文本转成日期值,再设置格式。用数组处理18000条数据会比逐个单元格循环快很多:

Sub ConvertTextDatesToDDMMYYYY()
    Dim ws As Worksheet
    Dim dataRange As Range
    Dim dataArray As Variant
    Dim i As Long
    
    ' 替换成你实际的工作表和数据列
    Set ws = ThisWorkbook.Sheets("Sheet1")
    Set dataRange = ws.Range("A1:A18000")
    
    ' 把数据读入数组,大幅提升处理速度
    dataArray = dataRange.Value
    
    ' 遍历数组处理每个文本日期
    For i = LBound(dataArray) To UBound(dataArray)
        If dataArray(i, 1) <> "" Then
            ' 拆分yy/mm/dd文本,转成日期值(这里默认年份是20xx,要是19xx就把"20"改成"19")
            dataArray(i, 1) = DateSerial( _
                CInt("20" & Left(dataArray(i, 1), 2)), _
                CInt(Mid(dataArray(i, 1), 4, 2)), _
                CInt(Right(dataArray(i, 1), 2)) _
            )
        End If
    Next i
    
    ' 把处理好的日期值写回单元格
    dataRange.Value = dataArray
    
    ' 设置显示格式为dd/mm/yyyy
    dataRange.NumberFormat = "dd/mm/yyyy"
End Sub

小提示

  1. 运行前记得先备份你的工作表,避免意外情况;
  2. 如果你的数据范围不是固定的A1:A18000,可以用ws.UsedRange.Columns("A")自动获取该列有数据的所有单元格;
  3. 要是年份既有19xx又有20xx,可以加个判断逻辑(比如如果左边两位年份大于50,就用19开头,否则用20开头),需要的话我可以再补充!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:36:57