Excel VBA实例(37) - 快速提取手机号及归属地

优采云 发布时间: 2022-05-12 04:56

  Excel 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文件进行试用吧~~

  你可能还会想看:

  欢迎交流!

  

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线