精华内容
下载资源
问答
  • 支持win10,没有替换功能,可以替代vba进行的测试工具
  • VBA中的正则表达式

    2014-12-23 18:22:58
    VBA中的正则表达式,正则表达式的基本知识讲解!
  • 正则表达在文字处理非常好用,可以进行复杂的字符串筛选判断,用于各种输入校验,字符串查找、替换,以及提取操作。
  • VBA正则表达式深度解析

    千次阅读 2020-06-26 18:07:14
    先上代码: Function GetStr(ByVal rng As ... '第三个参数i 为正则表达式成功匹配的结果列表中的第几个,从0开始,默认为0即第1个 '第四个参数s 为文本[True]或数字[False],用于剔除数字中的文本内容,默认...

    目录

    本文章可以学到:

    先上代码:

     分析:

    调式:

    细心一点会发现两个问题:

     一个一个的来解答


    本文章可以学到:

    • VBA正则表达式匹配第N个结果
    • VBA正则表达式剔除匹配包含字符的数字中剔除字符,只保留数字

    先上代码:

    Function GetStr(ByVal rng As String, str As String, Optional i As Long, Optional s As Boolean)
        '第一个参数rng    为数据源
        '第二个参数str    为正则表达式
        '第三个参数i      为正则表达式成功匹配的结果列表中的第几个,从0开始,默认为0即第1个
        '第四个参数s      为文本[True]或数字[False],用于剔除数字中的文本内容,默认为数字[False]
    
        If IsMissing(i) Then i = 0
        If IsMissing(s) Then s = False
    
        Dim iRg As Object
    
        Set iRg = CreateObject("VBscript.regexp")
        With iRg
            .Global = True
            .Pattern = str   '表达式,直接从用户函数的第二个参数中调用
    
            If .Execute(rng).Count = 0 Then
                '如果匹配到结果的量为0则
                GetStr = ""
                '返回结果为空值
                '函数结束
            Else
    
                If IsNumeric(.Execute(rng)(i)) Or s Then
                '如果第一次得到的结果是数字或者函数的第4个参数为True或非0则
                    GetStr = .Execute(rng)(i)
                    '直接返回第一次得到的结果
                    '函数结束
                Else
                    GetStr = GetStr(.Execute(rng)(i), "[0-9]+[.]{0,1}[0-9]{0,}")
                    '否则从第一次返回的结果中剔除数字以外的字符
                    '即调用函数本身再传入一个数字的正则表达式"[0-9]+[.]{0,1}[0-9]{0,}"
                End If
            End If
        End With
    End Function

     

     测试结果:

     BCDEF
    2源文本.1ss11.11cmcxzas/.'22.22cmwq.,3cmd.,/;eq4.44444cm
    3正则表达式.1[0-9]+[.]{0,}[0-9]{0,}[cm]
    4                第3参数(i)
    第4参数(s)     
    0123
    5
    6011.11   =GetStr(C2,C3,C4,B6)22.22  =GetStr(C2,C3,D4,B6)3  =GetStr(C2,C3,E4,B6)4.44444  =GetStr(C2,C3,F4,B6)
    7111.11c  =GetStr(C2,C3,C4,B7)22.22c =GetStr(C2,C3,D4,B7)3c =GetStr(C2,C3,E4,B7)4.44444c =GetStr(C2,C3,F4,B7)
    8     
    9源文本.2ss11.11cmcmxzas/.'22.22cmwq.,333333cmd.,/;eq4.44444cm
    10正则表达式.2[0-9]+[.]{0,}[0-9]{0,}[cm]+
    11                第3参数(i)
    第4参数(s)     
    0123
    12
    13011.11      =GetStr(C9,C10,C11,B13)22.22    =GetStr(C9,C10,D11,B13)333333   =GetStr(C9,C10,E11,B13)333333cm  =GetStr(C9,C10,E11,B14)
    14111.11cmcm  =GetStr(C9,C10,C11,B14)22.22cm  =GetStr(C9,C10,D11,B14)333333cm =GetStr(C9,C10,E11,B14)4.44444cm =GetStr(C9,C10,F11,B14)

     分析:

    我们从[C6]单元格开始说起

    代入目标单元格解析的公式是:

    =GetStr("ss11.11cmcxzas/.'22.22cmwq.,3cmd.,/;eq4.44444cm","[0-9]+[.]{0,}[0-9]{0,}[cm]",0,0)

     

    调式:

    在第17行代码添加断点,然后在监视窗口中添加监视:

    irg.Execute(Rng)

    双击[C6]单元格,回车就可以看到如下图所示

    可以看到这个 "[0-9]+[.]{0,}[0-9]{0,}[cm]正则表达式作用在这段"ss11.11cmcxzas/.'22.22cmwq.,3cmd.,/;eq4.44444cm"文字中,会得到4个结果,那么就可以通过传入第3个参数  i   来选择我们想要的第几个结果。

    在[C6]单元格中我们第三个参数是0,也是就返回匹配到的第0个结果,11.11c

     

    细心一点会发现两个问题:

    1. 传入的正则表达式是 "[0-9]+[.]{0,}[0-9]{0,}[cm]",末尾是 cm 为啥只匹配到了c
    2. 【C6】单元格的结果是11.11
       

     

     一个一个的来解答

    第1个问题是因为[cm]默认只匹配中括号中的第一个符号,也就是c,如果想要匹配[cm]有几种方法

    • 笨方法:[c][m]或者[cm]{2}或者[cm]{0,}
    • 好方法:[cm]+或者cm

     第2个问题是因为一般匹配的数字的时候,数字后面可能会有一些特定字符比如单位。而匹配的结果会把这些字符一起放进去,这样就不方便使用公式进行计算或者统计总数,需要二次匹配,也就是在得到一个包含字符的数字中剔除字符,只保留数字。

    关键就在24-33行代码:

                If IsNumeric(.Execute(rng)(i)) Or s Then
                '如果第一次得到的结果是数字或者函数的第4个参数为True或非0则
                    GetStr = .Execute(rng)(i)
                    '直接返回第一次得到的结果
                Else
                    GetStr = GetStr(.Execute(rng)(i), "[0-9]+[.]{0,1}[0-9]{0,}")
                    '否则从第一次返回的结果中剔除数字以外的字符
                    '即调用函数本身再传入一个数字的正则表达式"[0-9]+[.]{0,1}[0-9]{0,}"
                End If

    根据这个思路看测试结果,就很清晰明了了。

    看不明白的话把代码放在EXCEL模块里面多测试并调式就会明白了,有不明白的欢迎交流。

    展开全文
  • VBA的运算符和表达式

    千次阅读 2017-01-02 12:16:43
    VBA的运算符和表达式——百度文库 本文从广义的角度将VBA的运算符进行了全面的归纳和总结,包括通常意义上的算术运算符、连接运算符、比较运算符和逻辑运算符,还包括了赋值运算符、点运算符以及Like运算符、...

    VBA的运算符和表达式——百度文库

    本文从广义的角度将VBA的运算符进行了全面的归纳和总结,包括通常意义上的算术运算符、连接运算符、比较运算符和逻辑运算符,还包括了赋值运算符、点运算符以及Like运算符、AddressOf运算符等。同时,概述了表达式的知识。 


    提示 学习是需要思考和实践的,只有举一反三,才能真正理解和掌握。因为VBA的一些运算符涉及到较强的逻辑关系,您在阅读本文时,可以不断思考它们之间的逻辑关系。同时,您可以在VBE编辑器的模块中测试本文中的一些语句和示例,以加深认识。 


    在使用VBA编程时,您一定会经常使用到VBA运算符,它是VBA程序的重要组成部分。在本文中,我将运算符分为两大类,一类是通常意义上的运算符,即:算术运算符、连接运算符、比较运算符和逻辑运算符;另一类是与语句相关的运算符,即:赋值运算符和点运算符。此外,还简略地介绍一下Like运算符和AddressOf运算符。 

    您通过使用运算符,对VBA各种元素进行连接,或者完成一些运算以形成了VBA表达式或语句。再进一步说,表达式是数字、字符串、常量、变量、对象成员、以及运算符的组合。 算术运算符和表达式 


    ■ 算术运算符包括+(加法运算符)、- (减法运算符)、/ (除法运算符)、\(整除运算符)、Mod(取模运算符)、^(乘幂运算符),下面逐一进行介绍。 
    + 加法运算符。形成数值表达式,并将数值或数值表达式相加。也可用于连接两个字符串变量,但建议用连接运算符进行连接。例如,结果=表达式1+表达式2。 
    - 减法运算符。形成数值表达式,将数值或数值表达式相减。也可用在数值之前,用于表示负数。例如,结果=表达式1-表达式2。 
    * 乘法运算符。形成数值表达式,将数值或数值表达式相乘。例如,结果=表达式1*表达式2。 / 除法运算符。形成数值表达式,将两个数值或数值表达式相除,其中除数不能为零,否则会得到一个错误。例如,结果=表达式1/表达式2。 
    \ 整除运算符。将两个数值或数值表达式相除,并返回一个整数,即舍掉余数或者小数部分。例如,结果=表达式1\表达式2。例如,7\3的值为2。 
    Mod 取模运算符。将两个数值或数值表达式相除,并只返回余数。例如,结果=表达式1 Mod 表达式2。例如,7 Mod 3的值为1。 
    ^ 乘幂运算符。计算数值或数值表达式的乘幂。例如,结果=数值 ^ 指数。 ■ 算术运算符的优先顺序 
    算术运算符的优先顺序依次为:乘幂运算符(^)——乘法和除法运算符(*、/,两者没有优先顺序)——整除运算符(\)——取模运算符(Mod)——加法和减法运算符(+、-,两者没有优先顺序)。若在同一代码中多次使用同一个算术运算符,则从左到右运算。使用括号可以改变优先顺序。 连接运算符和表达式 
    & 连接运算符,用于连接字符串。它能把一些字符串变量连接在一起,形成一个新的字符串。在进行连接运算之前,任何非字符串变量或表达式都转换为字符串。例如,结果=字符串1&字符串2,其结果的数据类型为String类型。 
    + 混合连接运算符,它运用很灵活,但会与加法运算符相混,给您的阅读带来不便。例如,结果=表达式1+表达式2,其结果的数据类型取决于表达式的数据类型。 下面对这两种连接运算符进行测试,测试表达式为:     结果=表达式1+表达式2 
    当两个表达式都是数值数据时,用&运算符会将两个数值数据连接,如5 & 1连接后为51,但用+运算符后,会将两数值相加得到其结果,如5+1进行连接后为6。当两个表达式都是字符串(Sting)时,将对两个字符串进行连接为一个字符串。当两个表达式为空时,+运算符的结果为0,而&运算符的结果为Null值。当一个表达式为数值类型数据,另一个表达式为字符串类型数据时,+运算符将产生类型不匹配的错误,而&运算符则将两个表达式连接。未声明变量时,当一个表达式为数字,另一个表达式为字母时,+运算符和&运算符的结果均为数字,如j=7,k=student,i=j+k与i=j&k的结果均为7。当两个表达式都为空时,+运算符结果为0,而&运算符结果为Null值。 

    提示 您可以在VBE中调试,看看它们在各种情况下的区别。 比较运算符和表达式 


    ■ 比较运算符包括<(小于)、>(大于)、=(等于)、>=(大于或等于)、<=(小于或等于)、<>(不等于),用于数据元素的比较,其一般的语法为: 
        结果=表达式1 <比较运算符> 表达式2 
    结果为True(1)、False(0)或者为Null。其中比较运算符可以单独使用,也可以两两结合使用。如果表达式1或者表达式2本身为Null时才会产生Null的结果。 
    下面结合上述语法,对这些比较运算产生的结果为True或False时所需要的条件进行说明: > 表达式1大于并且不等于表达式2时,其结果为True;否则,为False。 < 表达式1小于并且不等于表达式2时,其结果为True;否则,为False。 = 表达式1等于表达式2时,其结果为True;否则,为False。 
    >= 表达式1大于或者等于表达式2时,其结果为True;否则,为False。 <= 表达式1小于或者等于表达式2时,其结果为True;否则,为False。 <> 表达式1不等于表达式2时,其结果为True;否则,为False。 
    比较运算符可用于数值比较或字符串变量比较,也可用于数值与字符串的比较。如果其中一个表达式是数值,另一个是字符串,则数值表达式总是“小于”字符串表达式;如果都是字符串,则最大的字符串就是最长的字符串;如果字符串一样长,则小写的大于大写的。 
    还有一个比较运算符,即Is运算符,可用于判断两个对象变量是否指向同一个对象,其语法为:     结果=对象1 Is 对象2 
    如果对象1和对象2都指向同一个对象,其结果为True;否则,结果为False。 

    还可以用Is运算符来判断一个对象变量是否符合要求,例如,条件判断语句If objVar Is Nothing Then 表明,如果对象变量objVar没有对象引用,则为True,执行Then后面的语句。

     

    ■ 比较运算符的优先顺序。如果多个比较运算符出现在同一行代码中,则按从左到右的顺序计算。 逻辑运算符和表达式 


    ■ 逻辑运算符允许对一个或多个表达式进行运算,并返回一个逻辑值。VBA的逻辑运算符包括:And(逻辑与)、Or(逻辑或)、Not(逻辑非)、Eqv(与或)、Imp(蕴含)、Xor(异或)。 And 执行逻辑与运算,即如果表达式1和表达式2都是True,则结果返回True;只要其中一个表达式为False,其结果就是False;如果有表达式为Null,则结果为Null。其语法为: 结果=表达式1 And 表达式2 

    例如,If x>1 And y<10 Then,表示如果x的值大于1且y的值小于10时,就执行Then后面的代码。又如,语句MsgBox ActiveSheet.Name=”Sheet2” And Range(“A1”)=1表示如果当前工作表名为Sheet2并且当前工作表上的单元格A1的值为1时,消息框将显示True。

     

    Or 执行逻辑或运算,即如果表达式1或者表达式2为True,或者表达式1和表达式2都为True,则结果为True;只有两个表达式都不是True时,其结果才为False;如果有表达式为Null,则结果也是Null。其语法为: 
        结果=表达式1 Or 表达式2 

    例如,If x>1 Or y<10 Then,表示如果x的值大于1,或者y的值小于10,则执行Then后面的代码。又如,语句MsgBox Range(“A1”)=1 Or Range(“B1”)=2表示如果当前工作表中的单元格A1中的值为1或者单元格B1中的值为2时,消息框将显示True。

     

    Not 对一个表达式进行逻辑非运算,即如果表达式为True,则Not运算符使该表达式变成False;如果表达式为False,则Not运算符使该表达式变成True;如果表达式为Null,则Not运算符的结果仍然是Null。其语法为: 
        结果=Not 表达式 
    例如,If Not IsError(x) Then,如果IsError返回False则执行Then后面的代码,表示x中不包含错误。 

    又如,语句Selection.Font.Bold=Not Selection.Font.Bold,其中Bold属性的值为True或False,使用Not运算符会将值False改为True,将值True改为False,这样可用于切换所选单元格是否“加粗”。这也是VBA程序编写时的一个技巧,我们可以运用Not运算符模仿工具栏“加粗”、“斜体”等按钮的工作模式,如当我们点击“加粗”按钮时,所选单元格中的字体将加粗显示,再次单击“加粗”按钮,单元格中的字体又正常显示了。 

    Eqv 执行与或运算,即判断两个表达式是否相等,当两个表达式都是True或者都是False时,结果返回True;若一个表达式为True而另一个表达式为False时,结果返回False。其语法为:     结果=表达式1 Eqv 表达式2 


    Imp 执行逻辑蕴含运算,其语法为:     结果=表达式1 Imp 表达式2 

    当两个表达式都为True和两个表达式都为False时,其结果为True;当表达式1为True,表达式2为False时,其结果为False;当表达式1为False,表达式2为True时,其结果为True;当表达式1为False,表达式2为Null时,其结果为True;当表达式1为True,表达式2为Null时,其结果为Null;当表达式1为Null,表达式2为True时,其结果为True;当表达式1为Null,表达式2为False时,其结果为Null;当两个表达式都为Null时,其结果为Null。上面的表述可能有点绕口,概括地说,不管表达式1,当表达式2为真时,其结果为True;当两个表达式都为False,或者表达式1为False,表达式2为Null时,其结果为True;当表达式1为True,表达式2为False时,结果为False;其它情况则为Null。

     

    Xor 执行逻辑异或运算,用于判断两个表达式是否不同。若两个表达式都是True或都是False时,其结果就是False;如果只有一个表达式是True,其结果就是True;如果两个表达式中有一个是Null,其结果是Null。其语法为: 

    结果=表达式1 Xor 表达式2 ■ 逻辑运算符的优先顺序 


    逻辑运算符的优先顺序依次为:Not——And——Or——Xor——Eqv——Imp。如果在同一行代码中多次使用相同的逻辑运算符,则从左到右进行运算。 运算符的优先顺序 
    如果您不了解运算符的优先级别(即哪个运算符优先运算,哪个运算符最后才运算),您的表达式可能会出现意想不到的结果。在前面的小节中,介绍了同一类运算符的优先顺序。如果在一行代码中包括多个运算符,则其进行运算的优先顺序是不相同的。运算符的优先级会影响到表达式的最终结果。 
    当一行代码中包括几类运算符时,其优先顺序为:算术运算符——连接运算符——比较运算符——逻辑运算符。 

    如果您要改变同类或不同类运算符的优先顺序,可以使用括号,括号内的表达式总比括号外的优先进行运算。 




    Like运算符 

    Like运算符用于判断给定的字符串是否与指定的模式相匹配,其语法为: 结果=字符串 Like 模式 

    其中,字符串为要与模式相比较的字符串,如果字符串与指定的模式相匹配,则结果为True;否则,其结果为False。如果字符串或者模式Null,则结果为Null。

     

    在模式中可使用一些特殊字符,其它的字符都能与它们相匹配,

    这些字符有:

    ?代表任意一个字符;

    *代表0或多个字符;

    #代表任意一个数字(0-9);

    [charlist]代表字符列表中的任意一个字符;

    [!charlist]代表不在字符列表中的任意一个字符;

    []代表空字符串(“”)。 

    Charlist将模式中的一组字符与字符串中的一个字符进行匹配,可以包含任何一种字符,包括数字;

    在Charlist中使用连字号(-)产生一组字符来与字符串中的一个字符相匹配,如[A-D]与字符串相应位置的A、B、C或D匹配;

    在Charlist中可以产生多组字符,如[A-D H-J];

    各组字符必须是按照排列顺序出现的;

    在Charlist的开头或结尾使用连字号(-)或以与连字号自身相匹配,例如[-H-N]与连字号(-)或H到N之间的任何字符相匹配;

    在Charlist中的一个字符或者一组字符前加上!号,表明与该字符或该组字符之外的所有字符匹配,如[!H-N]与字符H-N范围之外的所有字符匹配;

    而在[]外使用!号则只匹配其自身。

    要使用任何特殊字符作为匹配字符,只需将它放在[]中即可,例如[?]表明要与一个问号进行匹配。

    下面给出一个例子。 

    打开一个工作簿,选择菜单“工具——宏——Visual Basic编辑器”或按Alt+F11组合键,打开VBE编辑器。

    在VBE编辑器中,选择菜单“插入——用户窗体”,新建一个用户窗体,点击控件工具箱中的“文本框”控件和“按钮”控件,在用户窗体上放置一个“文本框”和一个“按钮”,并在用户窗体中对它们的大小和位置进行合理调整,双击刚创建的“按钮”控件,并输入下面的代码:

     Private Sub CommandButton1_Click()   

    Dim sEnd As String, sPattern As String   

    sEnd = "in Office" 

      sPattern = "[F W]*" & sEnd 

      If TextBox1.Text Like sPattern Then

         MsgBox "输入正确"  

     Else 

        MsgBox "输入错误"  

    End If 

    End Sub 

    本代码中[F W]*表示字符以F或W开头的字符串,使用&连接符将其与变量sEnd所代表的字符串“in Office”相连接。如果您在文本框中输入以字符F或字符W开头并以“in Office”结尾的句子,将显示“输入正确”消息框,否则将显示“输入错误”的消息框。

    在VBE编辑器中点击运行按钮或按F5键,运行该代码试试。

    当您在文本框中输入“Fanjy in Office”后,单击按钮,将显示“输入正确”消息框。




     AddressOf运算符 

    AddressOf运算符将过程的地址传递给API函数。其语法为     AddressOf 过程名 
    其中,过程名为需要传递给API函数地址的过程名称。AddressOf运算符后面必须是用户定义的函数名、过程名或属性名,且该过程或函数必须保存在代码模块中。 赋值运算符 
    在VBA中使用等号(=)作为赋值运算符,它将其右侧的数据或者表达式的结果赋给左侧的变量,使其在程序代码中运用。例如,x=666,Range(“A1”).Value=”Dog”。 点运算符 
    在VBA中,使用点运算符来引用某个对象。运用点运算符,可以限定所引用的对象的位置,清楚地表明该对象的层次结构,还可以指定某对象的方法或属性。例如,语句Workbooks(“Book1.xls”).Worksheets(“Sheet1”).Range(“A1”)表明对工作簿Book1中的工作表Sheet1上的单元格A1的引用;又如,语句Msgbox Worksheets(“Sheet1”).Range(“A1”).Value表明显示当前工作簿中工作表Sheet1上单元格A1的值。
    展开全文
  • 正则表达式入门教程 VBA [ 日期2011-08-25] 来源 作者 admin [字体 大 中 小] 引言 正则表达式 regular expression 就是用一个 字符串来描述一个特征 然后去验证另一个 字符串是否符合这个特征 比如 表 达式 ab+ ...
  • 网上测试了很多,大多数都不满意。于是自己编写了一个。VBA利用通配符或正则表达式删除Word中选中部分的多余空行,支持把手动换行符替换为段落标记处理。
  • Private Sub 批量替换去除无用字符() Application.ScreenUpdating = False '关闭屏幕刷新 ... '此处定义正则表达式 Set RegExp = CreateObject("vbscript.regexp") '初始化正则对象 With RegExp .Global =.

     

    ========================

       'Pattern代码汇总
        '^\s 替换行首空格
        '^\n 替换行首的换行符
        '"^\d\.\s*" 去除序号
        '^(.*)$ 匹配整行

    ========================

    Private Sub 批量替换去除无用字符()
        Application.ScreenUpdating = False '关闭屏幕刷新
    
        Dim RegExp As Object
        Dim SearchRange As Range, Cell As Range
         
        '此处定义正则表达式
        Set RegExp = CreateObject("vbscript.regexp")
    
        '初始化正则对象
        With RegExp
        .Global = True
        .IgnoreCase = True
        .MultiLine = True
        .Pattern = "^\n"
        End With
    
        '此处指定查找范围
        Set SearchRange = Selection
         
        '遍历查找范围内的单元格
        For Each Cell In SearchRange
            Set matches = RegExp.Execute(Cell.Value)
            If matches.Count >= 1 Then
                Cell.Value = RegExp.Replace(Cell.Value, "")
            End If
        Next
    
    Application.ScreenUpdating = True '开启屏幕刷新
    End Sub

    ========================

    Private Sub 单元格内每行内容添加序号()
        Application.ScreenUpdating = False '关闭屏幕刷新
    
        Dim RegExp As Object
        Dim SearchRange As Range, Cell As Range
         
        '此处定义正则表达式
        Set RegExp = CreateObject("vbscript.regexp")
    
        '初始化正则对象
        With RegExp
        .Global = True
        .IgnoreCase = True
        .MultiLine = True
        .Pattern = "^(.*)$"
        End With
    
        '此处指定查找范围
        Set SearchRange = Selection
         
        '遍历查找范围内的单元格
        For Each Cell In SearchRange
            Set matches = RegExp.Execute(Cell.Value)
             If matches.Count > 1 Then
                For Each Match In matches
                    n = n + 1
                    strcell = strcell & n & ".  " & Match.Value & Chr(10)
                Next
    	'最后一行多了一个Chr(10),需要截去
                Cell.Value = Mid(strcell, 1, Len(strcell) - 1)
            End If
        Next
    
        Application.ScreenUpdating = True '开启屏幕刷新
    End Sub

    ========================

    Public Sub 用空格连接选中单元格内容()
        Dim str As String, temp As String, CXrng As Range, XRrng As Range
        Set CXrng = Selection
     
        For Each XRrng In CXrng
            str = str & Chr(32) & XRrng.Value
            XRrng.ClearContents
        Next
        CXrng(1) = str
    End Sub
    
    '连接多个单元格文本,使用Alt+Enter
    Public Sub 用Alt+Enter连接选中单元格内容()
        Dim str As String, temp As String, CXrng As Range, XRrng As Range
        Set CXrng = Selection
     
        For Each XRrng In CXrng
            str = str & Chr(10) & XRrng.Value
             XRrng.ClearContents
        Next
         CXrng(1) = str
    End Sub

    ======================

    Sub 正则表达式提取匹配文本()
    	'定义正则对象和单元格区域
    	Dim rngRg As Range
    	Dim objRe As Object
    	
    	'创建正则对象,并将当前选择区域赋值给rngRg
    	Set objRe = CreateObject("vbscript.regexp")
    	Set rngRg = Selection
    	
    	'初始化正则对象
    	With objRe
    	.Global = True
    	.IgnoreCase = True
    	.MultiLine = True
    	.Pattern = "AAA"
    	End With
    	
    	'遍历选择区域的每个单元格
    	For Each cell In rngRg
    	'如果有符合正则表达式的对象
    	    If objRe.test(cell.Value) Then
    	'将匹配集合的所有对象的值复制给Matches对象
    	        Set Matches = objRe.Execute(cell.Value)
    	'遍历Mathces对象,将结果输出到右侧单元格内
    	        For countM = 1 To Matches.Count
    	            cell.Offset(0, countM) = Matches(countM - 1)
    	        Next
    	    End If
    	Next
    End Sub

    ========================

    Sub 正则表达式替换内容输出到右侧列()
    	Application.ScreenUpdating = False '关闭屏幕刷新
    	'定义正则对象和单元格区域
    	Dim rngRg As Range
    	Dim objRe As Object
    	
    	'创建正则对象,并将当前选择区域赋值给rngRg
    	Set objRe = CreateObject("vbscript.regexp")
    	Set rngRg = Selection
    	
    	'初始化正则对象
    	With objRe
    	.Global = True
    	.IgnoreCase = True
    	.MultiLine = True
    	.Pattern = "AAA"
    	End With
    	
    	'遍历选择区域的每个单元格
    	For Each cell In rngRg
    	'如果有符合正则表达式的对象
    	    If objRe.test(cell.Value) Then
    	'将匹配集合的所有对象的值进行替换,并输出在右侧一列
    	        cell.Offset(0, 1) = objRe.Replace(cell.Value, "BBB")
    	    End If
    	Next
    	
    	Application.ScreenUpdating = True'开启屏幕刷新  
    End Sub

    =======================

    =======================

    =======================

    =======================

    =======================

    =======================

    =======================

    =======================

    =======================

    =======================

    =======================

    =======================

     

     

     
     
    展开全文
  • vba正则表达式

    2018-11-28 17:24:46
    vba正则表达式学习文档,涵盖详细的正则语法说明、有具体的功能例子,可做文档查询或实例参考。
  • vba正则表达式基础

    2014-12-23 18:24:28
    vba正则表达式基础知识介绍,由浅入深,实例讲解
  • VBA 正则表达式 资料整理创建正则表达式1. 前期引用2. 后期引用正则表达式的属性与方法示例 创建正则表达式 正则表达式(Regular Expression),常被用来检验、替换符合某个模式(规则)的字符串,在代码中常缩写为 ...

    创建正则表达式

    正则表达式(Regular Expression),常被用来检验、替换符合某个模式(规则)的字符串,在代码中常缩写为 regexp
    VBA中并没有直接提供正文表达式对象,需要借助 VBScript 的正则对象。

    1. 前期引用

    如果使用前期绑定,那么就需要在VBE中引用如下扩展库。
    在这里插入图片描述

    2. 后

    展开全文
  • EXCEL VBA 正则表达式 从实例开始 所有代码都测试过 ' ' '[2011-09-09 '[2010-08-08 ' 数据验证经常出现的情况是需要验证和处理大量的文本 内容 有时候需要查找字符串 有时候要按条件替换 并且这些待处理的问题还是...
  • VBA正则表达式入门与提高

    万次阅读 多人点赞 2019-05-10 11:30:37
    精通正则表达式>>专业书籍是世人公认的正则权威著作.但它不太适合初学者,尤其是没有相关编程语言背景及书中所及的种种计算机技术知识的读者.其中很多晦涩难懂的内容在VBA中用不上或者对你来说根本无用的,而...
  • 正则表达式中的元字符特殊字符重复字符字符集通配符其它字符运算符优先级  正则表达式由若干个 分支 构成,分支之间用符号 | 相连。从逻辑上讲,分支之间是一种“或”的关系,一个字符串只要与正则表达式中的任何一...
  • 然而之前没学VBA里的正则表达式语法,因此就去网上搜了一下,结果发现根本不能运行。几经辗转,总算搞定,因此总结一下,供后来者参考。编程目的:实现IP地址中省市信息的提取。主要涉及的知识点:VBA函数、正则...
  • VBA 正则表达式

    2019-02-26 09:40:41
    文档涵盖了VBA中正则表达式的使用,以及一些实例案件,可以由浅入深的讲解VBA 中正则表达式的实现
  • VBA之正则表达式(1)-- 基础篇

    万次阅读 多人点赞 2019-03-03 15:06:26
    VBA中并没有直接提供正文表达式对象,需要借助VBScript的正则对象。如果使用前期绑定,那么就需要在VBE中引用如下扩展库。 使用如下代码可以利用后期绑定的方式创建正则对象。 Set objRegEx = CreateObject(&amp...
  • vba 正则表达式

    2013-01-08 22:58:33
    正则表达式基础说明, 供初学者参考,大婶绕过
  • VBA-正则表达式

    千次阅读 2018-07-19 19:37:23
    1.写好正则表达式,在数据截取处理中是十分有优势的,以下举几个例子来学习一下正则表达式的用法 Option Explicit Public Function getnum2(str As String) With CreateObject("VBScript.RegExp") ....
  • VBA基础知识整理(正则表达式

    万次阅读 2019-05-13 19:21:12
    '一 正则表达式 '正则表达式是处理字符串的外部工具,它可以根据设置的字符串对比规则,进行字符串的对比、替换等操作。 '正则表达式的作用: '1、完成复杂的字符串判断 '2、在字符串判断时,可以最大...
  • EXCEL VBA 正则表达式

    万次阅读 2017-07-06 16:15:09
     正则表达式是通用的文本搜索和处理方案,它的知识不是VBA独有的,基本上每种语言都内置了正则表达式的功能。正则表达式的基础知识不是这里的重点,需要的朋友可以Google一下,或者参看下面的一些入门教程: ...
  • VBA之正则表达式(5)-- 中文字符

    千次阅读 2019-03-10 11:07:46
    相关博文链接: VBA之正则表达式(1)-- 基础篇 VBA之正则表达式(2)-- 批量修改公式 VBA之正则表达式(3)-- 特殊公式计算 VBA之正则表达式(4)-- 提取日期和金额 VBA之正则表达式(5)-- 中文字符 VBA之正则...
  • EXCEL随机数据 使用 单元格表达式 以及 Excel VBA 快速生成随机数据。使用单元格表达式(函数)在指定范围产生随机整数、小数、大小写英文字符、字符串、随机日期和随机时间,并设定输出的时间格式和日期格式。产生...
  • 如何在VBA中使用正则表达式

    千次阅读 2019-05-26 11:56:56
    VBA中的正则表达式应用  在VBA中使用正则表达式,可以通过下列途径实现: 创建正则表达式对象: 前期绑定: 在VBA代码编辑器中的"Tools"菜单中,选中"References…",然后引用Microsoft VBScript Regular ...
  • 转自:http://www.pinlue.com/article/2020/06/1515/2710739884644.html
  • Excel-VBA正则表达式提取文本案例

    千次阅读 2019-10-02 23:47:44
    然而之前没学VBA里的正则表达式语法,因此就去网上搜了一下,结果发现根本不能运行。几经辗转,总算搞定,因此总结一下,供后来者参考。  有几点说明:  1、我是先在 Python中验证了正则表达式再copy到VBA中应用...
  • 实例需求:提取 @ 之间的纯数字(无小数点),并将结果累计求和。 测试字符串:abc100@ 200 @300$def400ghj@ 500 @600 ...这个字符提取规则相对简单,直接使用...VBA之正则表达式(17)-- 提取多组数据(去除末尾字符)
  • vba的正则表达式使用

    千次阅读 2018-09-23 23:43:21
    Sub getNum1()  ' 这种使用方式需要"工具""引用"  ' 引用Microsoft VBScript Regular Expressions 5.5类库  Dim i As Integer  Dim j As Integer  j = 1 ... Dim reg As New RegExp ...
  • EXCEL VBA 正则表达式 MatchCollection对象

    千次阅读 2016-12-03 23:07:55
     正则表达式是通用的文本搜索和处理方案,它的知识不是VBA独有的,基本上每种语言都内置了正则表达式的功能。正则表达式的基础知识不是这里的重点,需要的朋友可以Google一下,或者参看下面的一些入门教程: ...
  • 如要将一个Word文档内的两个汉字中间的空格替换掉(之...查找:([一-﨩])( )([一-﨩])替换:13写成VBA代码:Sub 替换()With Selection.Find .Text = "([一-﨩])( )([一-﨩])" .Replacement.Text = "13" .Forward = Tr...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,531
精华内容 1,812
关键字:

vba表达式