Excel VBA 8.23 批量提取单元格中的中文 呼叫正则
批量提取单元格中的中文 呼叫正则
点击上方“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 With
Next a
End Sub
提取的方式,我们依然是选择通过正则来提取
乍一看代码,是不是和之前的代码,很相似,很类似
如果你能够得出这样的结论,那么恭喜你,证明你对正则的写法已经有了一个大概的轮廓了,事实上,确实是差不多,我么先看看效果
从效果上来看,还是达到了我们的要求,成功的提取出了中文,后面三行当初是数字+英文的搭配,并没有中文,所以也最终的结果是空值,非常完美。
代码解析
来进入今天的代码
今天的代码和我们之前8.20的代码是差不多的,唯一的不同之处就是正则表达式
那么经过上节课的学习,你现在应该知道正则表达式是哪一句代码了吧
.Pattern = "\W"
就是他。
之前我们提取数字的时候是怎么样写的呢?
.Pattern = "\d"
对比下就可以知道两句代码的差异了,"\W"在正则表达式中,代表的就是汉字,当然官方标准说法不是这样的,如果要标准的汉字的表达式,并不是这样写的,应该是"\u4E00-\u9FA5"
在用正则匹配汉字的时候,如果"\W"不行的话,可以使用"\u4E00-\u9FA5",后者更加标准,匹配效果也更加准确
留意到最后三行的结果为空,因为没有中文,所以匹配结果是不存在的,自然返回的就是空值了
重点:
要留意这里的W一定要是大写的,不能是小写的,正则表达式对于大小写的要求是非常严格的,至于为什么一定要是大写,留个悬念,下节便知!