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

VBA实现将YYYYMMDD格式日期转换为dd/mm/yyyy格式

将E列YYYYMMDD格式批量转换为dd/mm/yyyy的VBA实现

核心思路

不用手动拆分日/月/年,直接利用VBA的DateSerial函数将8位数字的YYYYMMDD字符串/数值转换为日期值,再设置单元格显示格式为dd/mm/yyyy,既保证日期的可计算性,又实现目标显示效果。

基础版代码(适合小数据量)

Sub ConvertYYYYMMDDtoDDMMYYYY()
    Dim ws As Worksheet
    Dim lastRow As Long
    Dim rng As Range
    Dim cell As Range
    
    ' 替换为你的工作表名称
    Set ws = ThisWorkbook.Worksheets("Sheet1")
    
    ' 获取E列最后一行有数据的行号
    lastRow = ws.Cells(ws.Rows.Count, "E").End(xlUp).Row
    
    ' 定义处理范围(假设E1是表头,从E2开始;无表头则改为E1:E" & lastRow)
    Set rng = ws.Range("E2:E" & lastRow)
    
    ' 逐个处理单元格
    For Each cell In rng
        ' 验证内容是8位数字
        If Len(cell.Value) = 8 And IsNumeric(cell.Value) Then
            ' 转换为日期值:年(前4位)、月(中间2位)、日(后2位)
            cell.Value = DateSerial(Left(cell.Value, 4), Mid(cell.Value, 5, 2), Right(cell.Value, 2))
            ' 设置显示格式
            cell.NumberFormat = "dd/mm/yyyy"
        End If
    Next cell
End Sub

高效版代码(适合大数据量)

如果E列数据超过几千行,用数组批量处理比逐个循环单元格快得多:

Sub ConvertYYYYMMDDtoDDMMYYYY_Fast()
    Dim ws As Worksheet
    Dim lastRow As Long
    Dim arr As Variant
    Dim i As Long
    
    Set ws = ThisWorkbook.Worksheets("Sheet1")
    lastRow = ws.Cells(ws.Rows.Count, "E").End(xlUp).Row
    ' 把单元格数据读入数组
    arr = ws.Range("E2:E" & lastRow).Value
    
    ' 数组内批量处理
    For i = LBound(arr) To UBound(arr)
        If Len(arr(i, 1)) = 8 And IsNumeric(arr(i, 1)) Then
            arr(i, 1) = DateSerial(Left(arr(i, 1), 4), Mid(arr(i, 1), 5, 2), Right(arr(i, 1), 2))
        End If
    Next i
    
    ' 将处理后的数组写回单元格
    ws.Range("E2:E" & lastRow).Value = arr
    ' 统一设置格式
    ws.Range("E2:E" & lastRow).NumberFormat = "dd/mm/yyyy"
End Sub

注意事项

  • 确保E列内容是无空格、无特殊字符的8位数字(如20230118),否则代码会跳过不符合条件的单元格
  • 运行代码前建议先备份工作表,避免数据意外丢失
  • 若E列没有表头,把代码中的E2改为E1即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 17:11:13