分享

Excel VBA 8.21 提取单元格中的数字 从来都不难

 Excel和VBA 2021-09-09

提取单元格中的数字 从来都不难


点击上方“Excel和VBA”,选择“置顶公众号”

致力于原创分享Excel的相关知识,源码,源文件打包提供

一起学习,一起进步~~


前几天我收到了一个小伙伴的反馈,他表示希望能够针对单元格内容中数字的提取稍微说一下,单元格中内容的提取也是很常见的操作,如果数据量小的话,我们可以用最传统的方法,手工+肉眼的方式来提取,但是如果碰到数据量大的话,就需要考虑用其他的方法了,这个其他,自然就是指VBA了。一起来看看

场景说明

简单的构造一下数据,常见的数字提取的场景,无外乎就是上面几种,数字在开头,或者结尾,或者中间,或者搭配中文,或者搭配英文,常规的就这样。

那我们就以这个数据源为引子,开启关于单元格内容提取的篇章吧,比方说提取中文,提取英文,电话。。。。

好了,撤的有点远了。

回归正题,我们用VBA将单元格中的数字提取出来

代码区

Sub sz()Dim rng As Range, a As RangeSet 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 WithNext aEnd 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 啦。

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多