Excel VBA实例(37) - 快速提取手机号及归属地
优采云 发布时间: 2022-05-12 04:56Excel VBA实例(37) - 快速提取手机号及归属地
将永恒君的百宝箱设为星标精品文章第一时间读背景需求
永恒君最近处理资料,碰到一个这样的问题,如下图:
联系人的手机号码夹杂在各种不规则的、混乱的字符串当中,需要一个一个的提取出来,并查询到该手机号的归属地。
过程分析及效果
两个需求一个一个来说。
1、提取手机号码。
如上图可以看到,每个手机号所在单元格的位置不一样,基本上没有啥规律可言,自然就无法用left、right、mid之类的函数了。永恒君首先想到的就是使用正则表达式来提取。
关于正则表达式,永恒君之前写过不少相关文章和实例:
这里永恒君设置一个自定义的函数phone,提取的结果就是手机号,代码如下:
Function phone(i As String) As String<br /> Dim a As Object<br /> Set a = CreateObject("VBSCRIPT.REGEXP")<br /> a.Pattern = "[1][0-9]{10}"<br /> a.Global = True<br /> phone = a.Execute(i)(0)<br /> Set a = Nothing<br />End Function<br />
其中的核心就是 [1][0-9]{10}。
我国大陆的手机号都是1开头的11位数字,这个就表示要匹配寻找11位字符串,这个字符串以1开头,后面10位分别为0-9中任意一个。
把上面的代码粘贴到VBE编辑器里面,这样就可以直接使用phone函数了,
2、获取手机归属地
网上有很多在线的工具可以查询到手机号的归属地,但是要批量的查询的话,现成的工具还是不好找,要么付费、要么限制挺多。
所以,只好自己动手来制作一个爬虫,将手机号传递到在线工具,然后抓取返回结果。
这里经过测试之后,永恒君使用的是这个网站:
接着,只要在Excel中写了一个自定义函数phone_reg_loc,用来查询手机号归属地的。批量查询的话,只需要向下拖动即可实现了。
这个代码有点多,就不贴了,效果演示如下:
当然啦,如果你不想用函数的方式,希望直接一键点击获取结果,稍微修改也是可以的。
如果你对上面这些感兴趣的话,可以在公号内回复「手机号」获取vba文件进行试用吧~~
你可能还会想看:
欢迎交流!