打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
在Excel中像使用函数一样优雅的使用正则表达式!

从杂乱的数据中提取数值、提取字母、汉字这样的需求,实在是太常见了,我浏览论坛几乎每天都可以看到很多,以至于我想Excel应该有一个这样的函数。但是没有,于是我自己写了一个,也是为了方便在Excel中练习,所以有了今天这篇!

我们随便找一些网上实际的案例来一个一个解决吧!

 
案例1:提取数值

首先提供一些简单常用的提取写法,比如提取数值(+sz),我们要我们从字符串中删除数值可以使用-sz,第三参数默认0即可


还提供了以下简写参数(正负+首字母):
"-hz"   '删除汉字               "-zm" '删除字母"-sz"   '删除数字"+hz"   '提取汉字"+zm" '提取字母"+sz"   '提取数字
适用于简单的替换和提取! 如果复杂一些的,我们可以自己写正则表达式提取,比如多数值提取

 
案例2:多组数值提取

 
=INDEX(RegFun($A2,"(-?\d+)(\.\d+)?"),COLUMN(A1))
(-?\d+)(\.\d+)?    : 用于匹配浮点数


多个结果的情况下,RegFun的结果是一个数组,可以使用Excel自带的一些可以从数组中取数的函数配合使用!MS365可以直接输入(动态扩展)



 
案例3:综合提取-中文、数值和英文

 
[\u4e00-\u9fa5] :表示汉字
?=\d :在目标文本中,只有数字前面的汉字才会得到匹配()


VBA正则也是支持“零宽断言”,但是只支持正向环视!这是我们只是简单提一下,以后我们有机会再专门写关于正则表达式的专题!正则非常有意思!

更多案例我们就再举了!下面是代码,只是简单的写了一下,目前没有写subMatches部分!不是非常的完善,懂VBA且有兴趣的同学可以自行改写
源码

Option Explicit

'作者:小易
'公众号:Excel办公实战
'功能:正则表达式简易封装
'-------------------------------------------------------
Function RegFun(str As String, sPattern As String, _
                Optional bType As Boolean = True, _
                Optional bGlobal As Boolean = True, _
                Optional bMultiLine As Boolean = False, _
                Optional bIgnoreCase = False)
    Dim oReg As Object, oMatches As Object
    Dim arr(), i As Long, oMatch As Object
    Set oReg = CreateObject("VbScript.RegExp")
    With oReg
        .Global = bGlobal
        .MultiLine = bMultiLine
        .IgnoreCase = bIgnoreCase
        If bType Then
            .Pattern = sPattern
            Set oMatches = .Execute(str)
            If oMatches.Count > 0 Then
                For Each oMatch In oMatches
                    i = i + 1
                    ReDim Preserve arr(1 To i)
                    arr(i) = oMatch.Value
                Next
                RegFun = arr
            Else
                RegFun = ""
            End If
        Else
            Select Case sPattern
            Case Is = "-hz"   '去汉字
                .Pattern = "[一-﨩]"
            Case Is = "-zm" '
去字母
                .Pattern = "[a-zA-Z]"
            Case Is = "-sz"   '去数字
                .Pattern = "[0-9\.]"
            Case Is = "+hz" '
取汉字
                .Pattern = "[^一-﨩]"
            Case Is = "+zm"   '取字母
                .Pattern = "[^a-zA-Z]"
            Case Is = "+sz" '
取数字
                .Pattern = "[^0-9\.]"
            End Select
            RegFun = .Replace(str, "")
        End If
    End With
End Function

额,对了,不会看到这里你跟我讲,你不会正则吧!如果是,还不赶紧去学
超有意思的额!找不到教程的就等小编再写吧!

如何使用参考:如何使用VBA(宏)代码
保存为加载宏,即可在本机打开的任意工作薄中使用该函数!

本文由“壹伴编辑器”提供技术支持

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
每日Excel分享(VBA)| 正则表达式在Excel VBA中的应用(续)
Linux C 支持正则表达式的字符串替换函数
「Python自动化Excel」Python与pandas字符串操作
Excel乱序中提取信息的简便招法
WPS增加正则处理函数,简直如虎添翼
正则表达式
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服