微信公众号:yhjbox(永恒君的百宝箱),获取最新文章、资源。

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

Excel VBA 实例 永恒君 323℃ 0评论

背景需求

永恒君最近处理资料,碰到一个这样的问题,如下图:

图片

联系人的手机号码夹杂在各种不规则的、混乱的字符串当中,需要一个一个的提取出来,并查询到该手机号的归属地。

过程分析及效果

两个需求一个一个来说。

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) – 快速提取手机号及归属地

喜欢 (3)
发表我的评论
取消评论

*

code

表情