office excel 2016版本执行正则表达式

正则表达式,相信大家都不陌生。但在我们最常用的办公软件EXCEL中,目前没有可直接使用正则表达式的函数(至少10版本的EXCEL没有),那么今天我就分享下如何在EXCEL中自定义正则函数。

一、提需求
比如,我要拆分下面的字符串:

显然这样的需求,用正则表达式再合适不过了。

二、解决步骤
下面我们使用的这个方法,定义出的函数将长期有效:
1、新建一个EXCEL文件,我这里命名为RE,随后按ALT+F11打开宏编辑器,选中任意一个sheet,右键,选择插入模块:

2、双击模块1,编辑如下VBA自定义函数代码:

Function RE(OriText As String, ReRule As String, ReplaceYesOrNo As Boolean)
'''
'OriText:待匹配的字符串
'ReRule:正则表达式
'ReplaceYesOrNo:是否采用替换方法,1表示替换,0表示不替换,默认为不替换
'''

'创建一个正则表达式实例对象
Set ReObject = CreateObject("vbscript.regexp")

With ReObject

    '是否区分大小写,一般需求是不用区分大小写,因此这里为True
    .IgnoreCase = True

    '是否匹配所有,一般需求也都是匹配所有,这里也就默认是True,如果为False表示只匹配第一次出现的
    .Global = True

    '匹配时所用到的正则表达式
    .Pattern = ReRule

    If ReplaceYesOrNo Then

        '如果使用替换方法,则将正则表达式匹配到的项替换为空
        RE = .Replace(OriText, "")

    Else
        '否则,返回可迭代对象的第一项
        RE = .Execute(OriText)(0)

    End If

End With

End Function

3、另存为加载宏格式(写好代码直接ctrl+s,然后点击否,选择加载宏格
式,选择保存到桌面):

4、这时桌面会有两个文件,一个是本身的excel文件,一个是后缀为.xlam的文件,依次打开,打开.xlam文件不会产生新窗口,可以理解为在excel注入了该方法

然后就可以新建一列,第一个参数是对应的单元格,第二个参数是正则表达式字符串,第三个参数是是否替换(代码里面也有说明)
本次的需求是将除数字,字母,汉字之外的替换成空所以函数为 =RE(H2,"[^a-zA-Z0-9*\u4E00-\u9FFF]",1),
最后就可以执行了

转载自https://www.cnblogs.com/scottckt/archive/2009/07/14/1523157.html

posted @ 2022-07-22 11:16  怎言笑i  阅读(1088)  评论(0编辑  收藏  举报