实例需求:数据保存在A列中,需要将其中的日期和金额分别提取至B列和C列。其中日期也两种不同格式,金额可能包含小数点、千分符和货币标识。

示例代码如下:
Sub RegExp_Date_Num()
    Dim Res()
    Dim objRegEx As Object
    Dim objMH As Object
    Dim j As Integer
    Set objRegEx = CreateObject("vbscript.regexp")
    objRegEx.Pattern = "(\d{4}-\d{2}-\d{2}|\d{4}.\d{2}.\d{2}).*?(([A-Z]{3})*\d+[\d.,]*元)"
    objRegEx.Global = True
    For i = 2 To Cells(Rows.Count, "A").End(xlUp).Row
        form = Cells(i, "A")
        Set objMH = objRegEx.Execute(form)
        If objMH.Count > 0 Then
            Cells(i, 2) = CStr(objMH(0).submatches(0))
            Cells(i, 3) = CStr(objMH(0).submatches(1))
        End If
    Next
    Set objRegEx = Nothing
    Set objMH = Nothing
End Sub
【代码解析】
第6行代码使用后期绑定创建正则对象。
第7行代码指定正则匹配字符串,

如果直接使用[\d.,]+匹配金额中的数字,则会匹配到单个小数点或者逗号,例如数据为:旧的一年结束,元旦将要来临,此模式可以将匹配到,元。由此可见组织一个严谨的正则表达式需要考虑很多情况。
第8行代码设置为全局搜索模式。
第9行代码第16行代码循环处理工作表中的数据。
第11行代码执行正则匹配,返回结果为MatchCollection集合对象。
第13行和第14行代码分别将日期和金额写入工作表中

 ExcelHome
ExcelHome









