本文转载自公众号:永恒君的百宝箱,作者:永恒君。 之前有介绍过正则表达式:正则表达式,查找、筛选数据的又一利器! 其实在VBA当中一样可以用正则表达式来匹配数据,看下面的实例: 有非常多中文、数字、字母混合在一起的字符串,需要分别提取出其中的中文、字母、数字,还有数字和字母。 今天要用到的是VBA的自定义函数的功能,顾名思义,就是我们自己编写一个函数,用法和excel自带的如sum,if函数是一样的。 先把代码贴出来,需要注意的有两点: 1、需要新建模块,把代码写在其中。不能直接写在sheet表中。 2、代码开头的ZW、SZ、ZM、SZZM即为自定义的函数名,都是各自独立的函数,调用的时候就是写它们。 '只保留中文的代码如下: Function ZW(i As String) As String Dim a As Object Set a = CreateObject('VBSCRIPT.REGEXP') a.Pattern = '[^\u4e00-\u9fa5]' a.IgnoreCase = True a.Global = True ZW = a.Replace(i, '') Set a = Nothing End Function '只保留数字的代码如下: Function SZ(i As String) As String Dim a As Object Set a = CreateObject('VBSCRIPT.REGEXP') a.Pattern = '[^0-9]' a.IgnoreCase = True a.Global = True SZ = a.Replace(i, '') Set a = Nothing End Function '只保留字母的代码如下: Function ZM(i As String) As String Dim a As Object Set a = CreateObject('VBSCRIPT.REGEXP') a.Pattern = '[^A-Z^a-z]' a.IgnoreCase = True a.Global = True ZM = a.Replace(i, '') Set a = Nothing End Function '只保留数字和字母的代码如下: Function SZZM(i As String) As String Dim a As Object Set a = CreateObject('VBSCRIPT.REGEXP') a.Pattern = '[^A-Z^a-z^0-9]' a.IgnoreCase = True a.Global = True SZZM = a.Replace(i, '') Set a = Nothing End Function 演示一下调用函数的结果: 同样的,永恒君直接把上面实例VBA的文件分享出来,需要的就直接使用吧。 |
|
来自: L罗乐 > 《字符提取(文本函运用)》