实例需求:数据保存在A列中,需要将其中的日期和金额分别提取至B列和C列。其中日期也两种不同格式,金额可能包含小数点、千分符和货币标识。
示例代码如下:
- Set objRegEx = CreateObject("vbscript.regexp")
复制代码- objRegEx.Pattern = "(\d{4}-\d{2}-\d{2}|\d{4}.\d{2}.\d{2}).*?(([A-Z]{3})*\d+[\d.,]*元)"
复制代码- For i = 2 To Cells(Rows.Count, "A").End(xlUp).Row
复制代码- Set objMH = objRegEx.Execute(form)
复制代码- Cells(i, 2) = CStr(objMH(0).submatches(0))
复制代码- Cells(i, 3) = CStr(objMH(0).submatches(1))
复制代码 【代码解析】
第6行代码使用后期绑定创建正则对象。
第7行代码指定正则匹配字符串,
如果直接使用[\d.,]+匹配金额中的数字,则会匹配到单个小数点或者逗号,例如数据为:旧的一年结束,元旦将要来临,此模式可以将匹配到,元。由此可见组织一个严谨的正则表达式需要考虑很多情况。
第8行代码设置为全局搜索模式。
第9行代码第16行代码循环处理工作表中的数据。
第11行代码执行正则匹配,返回结果为MatchCollection集合对象。
第13行和第14行代码分别将日期和金额写入工作表中
作者:taller
微软全球最有价值专家
ExcelHome技术论坛VBA版块版主
EH论坛VBA系列图书主创人
|
|