批量提取单元格中的中文 呼叫正则点击上方“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一定要是大写的,不能是小写的,正则表达式对于大小写的要求是非常严格的,至于为什么一定要是大写,留个悬念,下节便知! |
|