如何在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
小提示
- 运行前记得先备份你的工作表,避免意外情况;
- 如果你的数据范围不是固定的
A1:A18000,可以用ws.UsedRange.Columns("A")自动获取该列有数据的所有单元格; - 要是年份既有19xx又有20xx,可以加个判断逻辑(比如如果左边两位年份大于50,就用19开头,否则用20开头),需要的话我可以再补充!
内容的提问来源于stack exchange,提问作者Frederik
相关产品推荐
相关产品推荐

