背景需求
永恒君最近处理资料,碰到一个这样的问题,如下图:
联系人的手机号码夹杂在各种不规则的、混乱的字符串当中,需要一个一个的提取出来,并查询到该手机号的归属地。
过程分析及效果
两个需求一个一个来说。
1、提取手机号码。
如上图可以看到,每个手机号所在单元格的位置不一样,基本上没有啥规律可言,自然就无法用left、right、mid之类的函数了。永恒君首先想到的就是使用正则表达式来提取。
关于正则表达式,永恒君之前写过不少相关文章和实例:
正则表达式,查找、筛选数据的又一利器!
这个查找、筛选数据的利器,你不能不会!
这样做,快速提取省份信息!
技巧 | 正则表达式实例 – 快速提取爱奇艺视频目录
Excel vba 实例(8)- 利用正则表达式进行定向提取
这里永恒君设置一个自定义的函数phone,提取的结果就是手机号,代码如下:
Function phone(i As String) As String
Dim a As Object
Set a = CreateObject("VBSCRIPT.REGEXP")
a.Pattern = "[1][0-9]{10}"
a.Global = True
phone = a.Execute(i)(0)
Set a = Nothing
End Function
其中的核心就是 [1][0-9]{10}。
我国大陆的手机号都是1开头的11位数字,这个就表示要匹配寻找11位字符串,这个字符串以1开头,后面10位分别为0-9中任意一个。
把上面的代码粘贴到VBE编辑器里面,这样就可以直接使用phone函数了,
2、获取手机归属地
网上有很多在线的工具可以查询到手机号的归属地,但是要批量的查询的话,现成的工具还是不好找,要么付费、要么限制挺多。
所以,只好自己动手来制作一个爬虫,将手机号传递到在线工具,然后抓取返回结果。
这里经过测试之后,永恒君使用的是这个网站:https://cx.shouji.360.cn/
接着,只要在Excel中写了一个自定义函数phone_reg_loc,用来查询手机号归属地的。批量查询的话,只需要向下拖动即可实现了。
这个代码有点多,就不贴了,效果演示如下:
当然啦,如果你不想用函数的方式,希望直接一键点击获取结果,稍微修改也是可以的。
如果你对上面这些感兴趣的话,获取vba文件可以在这里点击查看
或者公号内回复「手机号」进行试用吧~~
你可能还会想看:
VBA 实例(36) – 一键提取网页中的表格数据
VBA 实例(35) – 一键批量ppt转pdf
VBA 实例(34) – 快速匹配出名称不完全相同的数据
VBA 实例(33) – 一键提取word中加粗文字
VBA 实例(32) - 批量替换隐藏的神秘字符
VBA 实例(31) - 为VBA代码自定义快捷键
转载请注明:永恒君的百宝箱 » Excel VBA实例(37) – 快速提取手机号及归属地