数据分析中有一个重要的步骤,就是对数据进行预处理,数据的统一格式化。
例:如何将左边联系方式中的手机号码提取出来,结果如右边单元格所示:
从A列单元格的数据看,是手机号和固定电话的混和在一块的,其中固定电话显示也不规范,有的有区号,有的没有区号,有的区号和电话用“-”连接在一起,有的没有,而手机号码也不统一,有一个、二个、三个的。
如何数据量较少,可以逐个单元格复制提取,如果单元格很多的情况下,推荐使用VBA的方法批量提取,该VBA代码可以直接复制使用,不用修改内容
在 Excel中按ATL+F11,进行编程模式下,插入一个模块,创建一个自定义函数sz()函数
输入的代码如下所示:
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),得到的结果如下所示:
利用主要的提取原理:手机号第1位是1并且是11位数字
关键代码解释:
以A3单元格的值,做执行过程分析
58403844
这个字符的长度是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,直到把所有的手机号截取完成
不知道有没有看懂,没有看懂的话,就直接复制代码套用即可。
本节完,欢迎留言讨论您的看法
----------------------------
欢迎关注,更多精彩内容持续更新中....