分享

Excel VBA 8.23 批量提取单元格中的中文 呼叫正则

 Excel和VBA 2021-09-11

批量提取单元格中的中文 呼叫正则


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

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

一起学习,一起进步~~


之前我们学习了如何批量提取单元格中的数字,并且深化了一下提取之后的结果的展示样式

今天我们继续前进,单元格的内容中,肯定不仅仅只有数字,还会有中文,那么今天就来学习下如何提取单元格的中文

场景说明

依然我们还是带入实际的操作场景

为了方便大家的衔接和对比学习,这里场景我们还是保持一致, 尽量不要有太明显的变动。

和上节一样的 操作场景,不过我们今天需要提取的是单元格中的中文

至于方法嘛

我们肯定还是倾向于选择使用正则

正则这么强大的嘛?不仅仅可以匹配数字,还可以匹配汉字?

确实是这样的,来看看代码

代码区

Sub chinese()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 = "\W"        .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

提取的方式,我们依然是选择通过正则来提取

乍一看代码,是不是和之前的代码,很相似,很类似

如果你能够得出这样的结论,那么恭喜你,证明你对正则的写法已经有了一个大概的轮廓了,事实上,确实是差不多,我么先看看效果

从效果上来看,还是达到了我们的要求,成功的提取出了中文,后面三行当初是数字+英文的搭配,并没有中文,所以也最终的结果是空值,非常完美。

代码解析

来进入今天的代码

今天的代码和我们之前8.20的代码是差不多的,唯一的不同之处就是正则表达式

那么经过上节课的学习,你现在应该知道正则表达式是哪一句代码了吧

.Pattern = "\W"

就是他。

之前我们提取数字的时候是怎么样写的呢?

.Pattern = "\d"

对比下就可以知道两句代码的差异了,"\W"在正则表达式中,代表的就是汉字,当然官方标准说法不是这样的,如果要标准的汉字的表达式,并不是这样写的,应该是"\u4E00-\u9FA5"

在用正则匹配汉字的时候,如果"\W"不行的话,可以使用"\u4E00-\u9FA5",后者更加标准,匹配效果也更加准确

留意到最后三行的结果为空,因为没有中文,所以匹配结果是不存在的,自然返回的就是空值了

重点:

要留意这里的W一定要是大写的,不能是小写的,正则表达式对于大小写的要求是非常严格的,至于为什么一定要是大写,留个悬念,下节便知!

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多