Excel杂乱数据中批量提取手机号 VBA代码提取 图文

2021年2月8日18:19:38Excel杂乱数据中批量提取手机号 VBA代码提取 图文已关闭评论 334 views
微信公众号 【EXCEL880】 QQ群【165159540】
课程咨询 加我微信EXCEL880B试学网址http://v.excel880.com
数据分析中有一个重要的步骤,就是对数据进行预处理,数据的统一格式化。

例:如何将左边联系方式中的手机号码提取出来,结果如右边单元格所示:

Excel杂乱数据中批量提取手机号

从A列单元格的数据看,是手机号和固定电话的混和在一块的,其中固定电话显示也不规范,有的有区号,有的没有区号,有的区号和电话用“-”连接在一起,有的没有,而手机号码也不统一,有一个、二个、三个的。

如何数据量较少,可以逐个单元格复制提取,如果单元格很多的情况下,推荐使用VBA的方法批量提取,该VBA代码可以直接复制使用,不用修改内容

在 Excel中按ATL+F11,进行编程模式下,插入一个模块,创建一个自定义函数sz()函数

Excel杂乱数据中批量提取手机号

输入的代码如下所示:

Excel杂乱数据中批量提取手机号

Function sz(xstr As String)

Dim i As Integer

Dim n

For i = 1 To Len(xstr)

If Mid(xstr, i, 1) = 1 And IsNumeric(Mid(xstr, i, 11)) Then

n = Mid(xstr, i, 11)

If Len(n) = 11 Then

sz = sz & "/" & n

End If

End If

Next i

If Len(sz) Then

sz = Right(sz, Len(sz) - 1)

Else

sz =

End If

End Function

然后在单元格中调用自定义函数SZ(A2),得到的结果如下所示:

Excel杂乱数据中批量提取手机号

利用主要的提取原理:手机号第1位是1并且是11位数字

关键代码解释:

以A3单元格的值,做执行过程分析

58403844 15151884992 15195779387

这个字符的长度是32,让i从1至32做一个循环

i=1的时候,执行第一个IF语句

Mid(xstr, i, 1)=5,并不等于1

直接结束IF语句,继续i

那么i=2时,IF也不成立

直到i=10的时候,

Mid(xstr, i, 1)=1,并且IsNumeric(Mid(xstr, i, 11))也是数字

那么n就截取这11位,如果这个值是11位的,那就传递给sz保存下来

结果,继续i,直到把所有的手机号截取完成

不知道有没有看懂,没有看懂的话,就直接复制代码套用即可。

本节完,欢迎留言讨论您的看法

----------------------------

欢迎关注,更多精彩内容持续更新中....