您的位置:   网站首页    行业动态    1串代码,轻松搞定文本中的数字提取,建议收藏!

1串代码,轻松搞定文本中的数字提取,建议收藏!

阅读量:3740562 2019-10-24




文:徐军泰    图:徐军泰
来源 | 公众号:Excel卓越之道/Excel表格学院
大家好,我是徐老师~
原计划今天接上一篇,继续分享柱状图中参考数据的作法,但是昨天下午临时收到一个学员的提问,感觉更有意思,也是大家常常会遇到的比较棘手的问题,因此今天先穿插一篇来作答疑。
什么问题呢,直接看图:

从文本中提取数字(电话号码)——类似的场景,学了我们训练营的同学都做过大量的练习,比如下面这个表,从GDP数据中快速提取GDP、人口等数据:

基本上我们是“秒”提取的——利用快速填充一键(CTRL+E)完成提取。

对于今天提问中的数据,我们当然也可以使用快速填充来提取。但是由于案例中,有的行只有一个数字/电话号码,有的行有多个,用快速填充提取并不能保证100%的精确性。
那我们究竟如何将数字/电话号码逐个提取出来呢?今天教大家使用VBA正则表达式实现一键智能判断提取。
正则表达式(Regular Excpression)是VBA中专用用于描述文本规律的语言,比如我要从文本中提取的是所有的数字,不管有几位,全部提出来。
在正则表达式中,“\d”可以表示0到9的任意一个数字,而“+”则代表前面的字符至少出现1次,因此对于案例中的数字/电话号码,用正则表达式描述出来就是:
\d+
下面来看,如何用VBA代码进行具体的提取。

▲ 原数据
01编写代码
首先,按ALT+F11,打开VBE编辑器,然后插入一个模块,在其中编写如下代码:

对代码中关键语句进行说明:
setreg = CreateObject("VBScript.RegExp"),调用外部对象
reg.Global= True,设置正则表达式的Global属性为True,这样可以提取一串文本中所有满足条件的数字
reg.Pattern= "\d+",目标结果的正则表达式,即\d+,至少包含一个数字的数字
里边用两个For Next循环实现逐行判断以及逐列存放提取结果。
02运行代码
将光标定位到已编辑的代码任意位置,按F5运行,1秒都不用,就能看到执行结果了。

▲ 利用正则表达式快速提取电话号码
以后,再有类似的数据,直接套用代码,对数据的单元格位置做一些必要的修改就好了。
今天就介绍到这里,我是徐老师,感谢阅读。
近期计划录制一套VBA的课程,大家有想学的内容或者想解决哪些问题,欢迎留言/私信与我交流(BGXujuntai)。
最后,希望你们继续关注卓越之道每天的推文,每天11:20,给你一篇实用Excel干货。
如果想全面、系统进阶Excel,欢迎关注我的直播间。跟我学Excel,欢迎点击「阅读原文」报名表格学院终身会员,所有课程免费学习!

「Excel表格学院」
识别后,点击右上角“关注”
 作者    徐军泰 
——Excel畅销书作者,表格学院创始人,著有国内首部Excel动态图表书籍《左手数据,右手图表》,唯库、一起听课星球、人人都是产品经理等平台约讲师。
独创IPO学习心法,帮助1000+付费会员以及20000+付费课学员实现Excel水平快速提升。

订阅号:Excel卓越之道、跟徐军泰学Excel
服务号:Excel表格学院
个人微信:BGXujuntai(1对1私教、付费定制、企业培训)

   -感谢您的阅读-   
收藏 | 点赞 | 转发
 ▼ 学习更多Excel知识  欢迎关注表格学院知识店铺 
「Excel表格学院」
识别后,点击右上角“关注”
想跟我一样精通Excel吗?点击「阅读原文」成为表格学院终身会员免费学习我所有的Excel课程现在报名,还可以送1次30天实战营(12月1日第3期开营)单独报名训练营要299元哦~为自己投资不亏,你还在犹豫什么?
我就知道你“在看”

在线QQ咨询,点这里

QQ咨询

微信服务号