将不规范日期批量转换为日期格式

文摘   教育   2024-08-17 19:50   广东  
今天我们来看一个案例,如图A列,有很多不规范的日期格式,现在我们需要将他转为标准日期格式

规则如下

如有一个分隔符,则分隔符分隔的为年月,如1995.01变为1995/1/1

如有两个分隔符,则分隔为年月日,如2000.1.10变为2000/1/10

如是8位数字,则进行如下转换20001110变为2000/11/10

如是四位数字,则进行如下转换1101变为2011/1/1


下面我们来看看代码:

Sub ss()Application.ScreenUpdating = FalseApplication.DisplayAlerts = FalseDim arr(), i&, reg As Object, str, mats, matarr = Range("A1:A" & Cells(Rows.Count, 1).End(3).Row)Set reg = CreateObject("VBScript.RegExp")With reg    .Pattern = "(\d{1,4})"    .Global = TrueEnd WithOn Error Resume NextFor i = 1 To UBound(arr)    If arr(i, 1) <> "" Then        If arr(i, 1) Like "########" Then       '八位数字处理成年月日            str = Format(arr(i, 1), "0000-00-00")        ElseIf arr(i, 1) Like "####" Then         '四位数字处理成年月            str = Left(arr(i, 1), 2) & "-" & Right(arr(i, 1), 2) & "-1"        Else                                                      '其它有分隔符处理            Set mats = reg.Execute(arr(i, 1))            str = ""            For Each mat In mats                str = IIf(str = "", mat, str & "-" & mat)            Next        End If        arr(i, 1) = Format(CDate(str), "yyyy-mm-dd")    End If        If Err.Number = 13 Then    '错误处理        arr(i, 1) = "格式错误"        Err.Clear    End IfNext iSet reg = NothingRange("B1").Resize(UBound(arr), 1) = arrApplication.ScreenUpdating = TrueApplication.DisplayAlerts = TrueEnd Sub

第6-10行:创建正则,提取数字

第12行:循环A列数据

第13行:如果数据不为空,则进行数据处理

第14-15行:八位数字处理

第16-17行:四位数字处理

第19-26行:利用正则将分隔符分开的数字统一用”-“连接

第25行:转日期格式,如不是正确的日期格式,会报错

第18-31行:如果报错,则给B列填入格式错误

第34行:导出标准格式到B列

效果展示:

好了,本期教程就到这里啦,走过路过的点个关注分享一下吧,谢谢啦


Excel应用教程
主要提供Excel vba,函数,图表,数据透视表,pq,Js等教程
 最新文章