VBA学习(67):Excel VBA 提取数字/自定义工作表函数/正则表达式/批量提取电话号码

正则表达式(Regular Expression),又称为“正则式”、“规则表达式”、“常规表示法”,是一种用来匹配、查找、替换字符串的工具。它通过一定的符号、元字符和操作符的组合来表达一个特定的模式,从而匹配符合该模式的字符串。关于正则表达式的基本使用方法我们放在第二条文章。

今天我们分享的是一个提取0-9数字的自定义函数GetNum,在工作表、VBA中均可使用。

图片

函数使用:

1、A列我用mid函数、randbetween函数等模拟了一些文本与数字混合的字符串。

2、B列是以前的一个函数,可能是网上抄来的,记不清了。不管它,留着吧。

3、C列用GetNum函数,取A列字符串中的数字,不带参数,表示提取所有数字。

4、D列用GetNum函数,取A列字符串中的数字,第一个参数表示取第几个匹配结果,第二个参数表示连续数字的长度,联合起来表示符合指定长度的第几个数字。如果第二个参数省略,则表示匹配第几个数字,不管长度。

5、E列、F列同样用法。F列提取了第1个11位的连续数字,我们可以用来提取电话号码。

函数代码:

Function GetNum(str As String, Optional MatchType As Integer = 0, Optional MatchLen As Integer = 0)
    '函数参数2个,默认为0,表示提取所有数字,
    'MatchType,匹配类型,如果为0,表示提取所有数字,忽略第二参数,如果不为0,表示匹配第n个符合条件的元素
    'MatchLen,匹配长度,指定提取的连续数字的长度,如果0,表示任意长度,不为0,则提取参数值长度的连续数字
    '设第一参数=m,第二参数=n,如果m,n同时不为0,则表示提取第m个长度为n的连续数字。
    Dim regEx As Object
    Dim Result As String
    k = 0
    Set regEx = CreateObject("VBScript.RegExp")
    With regEx
        .Global = True
        .Pattern = "\d+"  '匹配一个及以上连续数字,那就是所有数字
    End With
    Set Matches = regEx.Execute(str)   '进行匹配,匹配结果存到Matches
    For i = 0 To Matches.Count - 1     '循环,根据参数取得匹配结果
        If MatchType = 0 Then
            Result = Result & Matches.Item(i).Value
        Else
            If MatchLen = 0 Then
                If i = MatchType - 1 Then
                    Result = Matches.Item(i).Value
                    Exit For
                End If
            Else
                
                If Len(Matches.Item(i).Value) = MatchLen Then
                    k = k + 1
                End If
                If MatchType = k Then
                    Result = Matches.Item(i).Value
                    Exit For
                End If
            End If
        End If
    Next
    GetNum = Result
End Function

代码解释参见代码注释吧。

 技术交流,软件开发,欢迎微信沟通:

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值