回来主页
当时方位: manbetx万博官网 > > Excel VBA教程 >

Excel VBA正则表达式提取字符串数字实例教程

时刻:2018-01-10 19:29来历:manbetx万博官网网 www.fwnyp.com修正:麦田守望者

日常作业中,常会遇到这样一个难题:如安在惨不忍赌的数据中快速提取需求的字符串?如下图所示。要提取出榜首列文本中转让的号码,QQ号,联系电话等。一般情况下咱们是怎样操作呢?

   原图:
正则表达式提取数字 
 
  提取作用:
正则表达式提取字符串
 
  在Excel中,单元格中简略的数据提取,咱们能够运用LEFT、RIGHT、MID等函数来完成。
 
  但假如单元格中既包括数字,又包括英文字母,且数字和字母个数不固定的情况下,怎样处理呢?关于这种不规矩的凌乱字符,最好的办法便是运用VBA加上正则表达式来处理,简略敏捷提取字符串数字,可大大提高作业效率。 
 
一、什么是正则表达式?
 
  正则表达式是一种特别的字符串形式,用于匹配字符串摆放的一套规矩。咱们能够用这个规矩去匹配查找能够匹配的上的字符串(即单元格中恣意你想要的信息)。简略来说,便是单元格中存在一个文本信息,这个信息中有一些咱们需求的内容,也有许多咱们不需求的内容,经过正则表达式,咱们告知Excel咱们需求哪些内容,然后Excel协助咱们从文本中提取咱们想要的内容。
 
  例如:怎样从一行凌乱的个人信息中匹配出身份证号码,由于身份证号码呈现方位不固定,咱们无法运用函数LEFT或许MID或许RIGHT来获取身份证号码,这边就能够考虑运用正则表达式,快速获取身份证号码。
 
<span class=keyword><a href=http://www.fwnyp.com/article/list_1.html target=_blank><a></span>
 
  在上面事例中的\d以及呈现的+、?都是什么意思呢?这些都是简略的正则表达式符号,了解这些字符在正则表达式中的暗语,你就能够快速处理文本数据了。
 
  二、正则表达式的分类及常用符号
 
  Excel中正则表达式归纳分为3类:
 
  榜首类是字符类,例如\d能够恣意匹配一个数字字符,能够匹配0-9,[a-z]能够匹配恣意一个小写字母;
 
  第二类是限定符,能够控制字符呈现的个数,例如手机号码一般是11位的数字,咱们就能够运用[1-9]\d{11}来表明,由于手机号码榜首位不能为0,所以用[1-9]来匹配1-9中恣意一个数字;
 
  第三类是定位符,控制字符呈现的方位。
 
  此外,若想用好正则表达式,首要下面的几个常用字符必需求把握:
VBA教程  
 
  经过上面各种符号的灵敏组合就能够去匹配任何你想要的规矩,查找到你想要的文本信息。
 
  三、正则表达式提取字符串数字事例剖析
 
  例如,从下表中的这段文本中提取出转让的手机号,QQ,以及联系电话。剖析可知,转让的手机号码是由11位的数字组成,且号码之前是固定格局[转让],因而咱们的正则表达式就能够写成\[转让\](\d{11});QQ号相似剖析,可得其正则表达式为QQ:(\d*);联系电话的正则表达式为联系电话:(\d{11})
正则表达式提取字符串数字事例剖析
 
  了解了什么是正则表达式之后,下面就一起来看看本文事例的完成办法吧!
 
  (1) 按ALT+F11(若右键-检查代码)弹出VBE窗口,然后新建模块,如下图:(牢记需求引证Microsoft VBScript Regular Expressions,在VBE窗口中,挑选东西—>引证)
  (2) 张贴的代码。
  (3)保存完代码之后回来到表格中,在单元格输入咱们方才写的自界说函数=GetNumber(B3,”QQ”),如下图:
 
  ◎代码解析
  函数包括2个参数,榜首个参数txt便是咱们在EXCEL单元格中需求处理的文本,第二个参数值假如是QQ,那么函数的回来值便是提取的QQ号码;假如第二个参数值是Tel,那么函数的回来值便是联系电话,否则不回来任何信息。
Function GetNumber(txt As String, searchtype As String) AsString
    '界说正则目标
    Dim reg As NewRegExp
    '设置正则目标的Pattern特点,值为正则表达式字符串
    Select Casesearchtype
    '假如函数第二参数值为QQ,则设置正则目标的Pattern特点为"QQ:(\d*)",在txt中匹配QQ号码
    Case"QQ"
        reg.Pattern ="QQ:(\d*)"
    '假如函数第二参数值为Tel,则设置正则目标的Pattern特点为"联系电话:(\d{11})",在txt中匹配联系电话
    Case"Tel"
        reg.Pattern ="联系电话:(\d{11})"
    '假如函数第二参数既不是QQ,也不是Tel,则退出函数
    Case Else
        Exit Function
    End Select
   
    Dim mh AsMatchCollection, m As Match
    '在文本中履行正则表达式查找,回来值为MatchCollection目标
    Set mh =reg.Execute(txt)
    For Each m In mh
        'm为Match目标,获取每一个Match目标成果中的子项调集SubMatches
        GetNumber =m.SubMatches.Item(0)
    Next
End Function
 
注:其间reg.Pattern= "QQ:(\d*)"以及reg.Pattern= "联系电话:(\d{11})";正则目标的Pattern特点值即为正则表达式,
在上面的事例中,呈现许多目标,例如RegExp,MatchCollection这些是什么呢?咱们有必要学习下VBA中的正则目标。
 
四、VBA中正则目标的常用特点和办法
 
  在VBA中,要运用正则表达式,那么首要是需求一个正则目标,其次告知正则目标咱们的正则表达式是什么,然后正则目标才开端依据咱们设置的正则表达式开端查找文本,是否有匹配内容,假如存在匹配,咱们能够将其回来,这也便是咱们运用正则表达式的意图了。
 
       那么,依据上面的一个逻辑,也便是界说正则目标——》设置正则表达式——》查找文本——》是否存在匹配 咱们来学习下VBA中的正则目标吧。
 
  Dim reg As New RegExp   经过这句话,咱们就界说了一个正则目标reg;
 
  有了正则目标之后,咱们又怎样来告知这个正则目标,正则表达式是什么呢?正则目标有一个特点是Pattern,这个特点的值便是咱们的正则表达式,是一个字符串。例如上面事例中的reg.Pattern= "QQ:(\d*)" 在这个事例中,QQ:(\d*)这个便是一个正则表达式,其间由于咱们需求的只要数字串,并不需求QQ:这几个字符,所以咱们能够将(\d*) 用括号括起来。
 
  接下来,便是正则目标开端作业,查找文本啦, 也便是上面事例中的reg.Execute(查找的文本) 其间这句话回来的是一个匹配调集,也是一个目标MatchCollection,对这个调集进行循环,取出每一个匹配目标也便是Match目标;而Match目标中的SubMatches.Item(0)便是咱们需求提取的内容。也便是下面这段代码:
Dim mh AsMatchCollection, m As Match
'在文本中履行正则表达式查找,回来值为MatchCollection目标
Set mh = reg.Execute(txt)
For Each m In mh
'm为Match目标,获取每一个Match目标成果中的子项调集SubMatches
GetNumber = m.SubMatches.Item(0)
Next
------分隔线----------------------------
标签(Tag):excel excel2013 vlookup函数 vlookup函数na过错
------分隔线----------------------------
引荐内容
猜你感兴趣