规则如下
如有一个分隔符,则分隔符分隔的为年月,如1995.01变为1995/1/1
如有两个分隔符,则分隔为年月日,如2000.1.10变为2000/1/10
如是8位数字,则进行如下转换20001110变为2000/11/10
如是四位数字,则进行如下转换1101变为2011/1/1
下面我们来看看代码:
Sub ss()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Dim arr(), i&, reg As Object, str, mats, mat
arr = Range("A1:A" & Cells(Rows.Count, 1).End(3).Row)
Set reg = CreateObject("VBScript.RegExp")
With reg
.Pattern = "(\d{1,4})"
.Global = True
End With
On Error Resume Next
For 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 If
Next i
Set reg = Nothing
Range("B1").Resize(UBound(arr), 1) = arr
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub
第6-10行:创建正则,提取数字
第12行:循环A列数据
第13行:如果数据不为空,则进行数据处理
第14-15行:八位数字处理
第16-17行:四位数字处理
第19-26行:利用正则将分隔符分开的数字统一用”-“连接
第25行:转日期格式,如不是正确的日期格式,会报错
第18-31行:如果报错,则给B列填入格式错误
第34行:导出标准格式到B列
效果展示:
好了,本期教程就到这里啦,走过路过的点个关注分享一下吧,谢谢啦