我们用excel处理处理数据的时候,希望数据都是规整的,比如一列姓名就都是姓名,一列地址就都是地址,一列电话就都是电话,但是实际使用的时候,由于各种原因,我们的数据经常是信息混杂在一起,今天介绍一种从混合数据中提取出电话号码的方法,简单的数据用分列以及left或者right函数,就可以做到,当然也有函数大咖们写的无比复杂的数组公式,但是毕竟函数的应用情景有限,我今天要介绍的是自定义函数中使用正则表达式来提取信息,这个方法基本可以通用 看图 C2公式,往下复制 普通函数方法 =MIDB(A2,SEARCHB("?",A2),LEN(A2)) 缺点是只能提取左边为汉字及中文标点的号码 正则函数 =regGet(A2,"d{11}") 可以提取所有11位数字形式号码,不管在文本中任何位置 alt+f11打开vba编辑器,插入模块 粘贴文章后面的代码,就可以在EXCEL表里使用了,注意使用代码的表要保存为以下格式中的一种:xls,xlsb,xlsm
代码如下 Public Function regGet(s, pString) '返回正则匹配d[^_]*d Dim matchs, regex Dim temp, N Set regex = CreateObject("VBScript.RegExp") With regex .Global = True .IgnoreCase = True .Pattern = pString Set matchs = .Execute(s) End With regGet = matchs(0).Value Set regex = Nothing Set matchs = Nothing End Function
|