提取单元格中的数字 从来都不难点击上方“Excel和VBA”,选择“置顶公众号” 致力于原创分享Excel的相关知识,源码,源文件打包提供 一起学习,一起进步~~ 前几天我收到了一个小伙伴的反馈,他表示希望能够针对单元格内容中数字的提取稍微说一下,单元格中内容的提取也是很常见的操作,如果数据量小的话,我们可以用最传统的方法,手工+肉眼的方式来提取,但是如果碰到数据量大的话,就需要考虑用其他的方法了,这个其他,自然就是指VBA了。一起来看看 场景说明简单的构造一下数据,常见的数字提取的场景,无外乎就是上面几种,数字在开头,或者结尾,或者中间,或者搭配中文,或者搭配英文,常规的就这样。 那我们就以这个数据源为引子,开启关于单元格内容提取的篇章吧,比方说提取中文,提取英文,电话。。。。 好了,撤的有点远了。 回归正题,我们用VBA将单元格中的数字提取出来 代码区Sub sz() Dim rng As Range, a As Range Set rng = Application.InputBox("请选择单元格区域", "提取单元格的数字", , , , , , 8) For Each a In rng MyStr = a.Value ResultStr = "" With CreateObject("VBSCRIPT.REGEXP") .Pattern = "\d" .IgnoreCase = True .Global = True If .test(MyStr) Then For Each Item In .Execute(MyStr) ResultStr = ResultStr & Item Next Item a.Offset(0, 1) = ResultStr End If End With Next a End Sub 说到提取数字,你可能还是一点思路都没有 因为之前我们的操作都可以用VBA的一些常用方法来实现,但是这个提取数字。。。似乎没有 不过不着急,其实在之前讲解单元格拆分的时候,我们已经用过这个方法了,有没有印象,他就是正则 先来看看代码的效果 整理来说,初步效果已经达到 。 代码解析前面已经说了,今天我们用到的方法,其实就是正则 也许很多小伙伴会非常希望讲解下VBA中正则的用法 我已经安排上了,后面会详细的讲解的,因为正则涉及的东西比较多,三言两语也说不清 这里大家就先学会这个方法 想要在VBA中使用正则,第一件事就是告诉VBA我要使用正则了,如何告诉呢? With CreateObject("VBSCRIPT.REGEXP") ***** end with 既然正则都需要写表达式,那么我们现在就来看看表达式怎么写 .Pattern = "\d{".IgnoreCase = True .Global = True 这三个就是正则表达式在VBA中的结构了 其中Pattern后面的就是正则表达式 IgnoreCase表示是否忽略大小写 Global则代表是否全局匹配 常规下,都是直接按照上面的模式写,只需要更改下pattern后面的正则表达式即可,这是套路 想要获得纯数字的结果,正则表达式就是"\d" 他就是匹配数字的 利用正则查找,他肯定会返回一个结果,这个结果我们就直接判断是否为空,如何判断 If .test(MyStr) Then For Each Item In .Execute(MyStr) ResultStr = ResultStr & Item Next Item a.Offset(0, 1) = ResultStr End If
下面这些就是基本套路了。套路这个东西,简单说,就是拿来用就好。 其中ResultStr就是最终返回的结果 有了结果,直接填入单元格中,这个简单操作,对大家来说都是so easy 啦。 |
|