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 ObjectDim Result As Stringk = 0Set regEx = CreateObject("VBScript.RegExp")With regEx.Global = True.Pattern = "\d+" '匹配一个及以上连续数字,那就是所有数字End WithSet Matches = regEx.Execute(str) '进行匹配,匹配结果存到MatchesFor i = 0 To Matches.Count - 1 '循环,根据参数取得匹配结果If MatchType = 0 ThenResult = Result & Matches.Item(i).ValueElseIf MatchLen = 0 ThenIf i = MatchType - 1 ThenResult = Matches.Item(i).ValueExit ForEnd IfElseIf Len(Matches.Item(i).Value) = MatchLen Thenk = k + 1End IfIf MatchType = k ThenResult = Matches.Item(i).ValueExit ForEnd IfEnd IfEnd IfNextGetNum = Result
End Function
代码解释参见代码注释吧。
技术交流,软件开发,欢迎微信沟通: