目录
引言
如下表格中是一批邮寄信息,里面的数据杂乱无章,我们本期的需求就是从这些邮寄信息中提取姓名和手机号码信息,并分别输出到C列和D列中保存
看到这个表格数据,真是一个字“乱”,毫无章法可言,姓名和手机号码顺序杂乱,有的出现在邮寄信息的开始位置,有的又在末尾,还有的在中间位置,如果想要用Excel公式独立解决几乎是不可能的。
那么还有没有办法将这两项提取出来呢?答案是肯定的,现在就教你们一种方法,不但快速而且能准确无误的自动提取出来,一起看看是如何做到的吧?
问题的分析与设计
想解决问题,就首先需要分析数据特点,既然出现的顺利杂乱无章,那么就寻找别的突破口。我们把姓名和手机号码分成两个部分实现,分别去分析它们的数据特点
手机号码提取分析
首先是手机号码,它们呢都有很多共同的特点,比如都是阿拉伯数字组成的,但不是唯一标识,比如门牌号、街道号码等也可能含有阿拉伯数字,又要如何将这些数据区别开来?那就涉及到手机号码的又一个特征:全部是11位数字组成
所以只要是阿拉伯数字组成的,并且是连续的11位,就可以认定这一串数字是手机号码了。那么这个取数逻辑使用VBA编码要如何实现呢?就不得不提到正则表达式了
使用正则表达式最关键的步骤就是匹配规则了,将“连续的11位数字”用正则表示就变成了“\d{11}”,解释如下:
- \d表示的就是数字
- {11}表示连续的11位
剩下的就是定义正则变量、设置规则及按照规则获取数据了,如下一段代码是正则的使用步骤,结果通过Debug输出到立即窗口中
Dim regxNum As New RegExp '创建正则对象regx
Dim myMatch As Object '存放结果
regxNum.Pattern = "\d{11}"
Set myMatch = regxNum.Execute("改为实际的邮寄信息") '提取手机号码
If myMatch.Count > 0 Then