精华内容
下载资源
问答
  • VBA 正则表达式

    2019-02-26 09:40:41
    文档涵盖了VBA中正则表达式的使用,以及一些实例案件,可以由浅入深的讲解VBA 中正则表达式的实现
  • 前面一节中我们讲过在正则表达式中 a|b 表示匹配a或者是b,同样 [ab]也表示匹配a或者b,而非匹配ab。[0-9]表示匹配0-9中任意一个数字,[234]表示匹配2或者是3或者是4,而非匹配234。也就是说表达或的关系 可以用“|...

    我的目标:让中国的大学生走出校门的那一刻就已经具备这些Office技能,让职场人士能高效使用Office为其服务。支持鹏哥,也为自己加油!

    前面一节中我们讲过在正则表达式中  a|b  表示匹配a或者是b,同样  [ab]

    也表示匹配a或者b,而非匹配ab。

    [0-9]表示匹配0-9中任意一个数字,[234]表示匹配2或者是3或者是4,而非匹配234。

    也就是说表达或的关系   可以用“|”,也可以用[]

    下面我们看下具体的例子:

    f44a0a15bf6f660557187ce5c7d9e9f4.gif

    要求:左边单元格中的数据以空格区分,希望根据空格拆分到右边的单元格。

    代码:

    Sub 拆分()Dim regx As Object, rng As Range, mat, m, n%Set regx = CreateObject("vbscript.regexp")With regx.Global = True.Pattern = "[0-9]+"For Each rng In [a1:a6]    Set mat = .Execute(rng)           For Each m In mat                 n = n + 1                 Cells(rng.Row, n + 1) = m           Next           n = 0NextEnd WithEnd Sub

    .Pattern = "[0-9]+"表示匹配0-9的之间的任意一个数字,“+”号表示匹配数字一次或者是多次,这样就把每个以空格分割开的数字全匹配出来了。

    当然我们也可以写成  .Pattern = "\d+"。

    [0-9a-zA-z]表示从0-9任意数字、a到z任意字母,或者A到Z任意字母。

    本节的分享就到这里,鹏哥祝大家每天都有进步。

    加入米宏Office培训群,每天进步一点点!

    从基础操作到VBA,

    两杯咖啡的钱,

    换取一份如此详细的Excel视频资料,

    你还在犹豫?

    欲购从速,联系微信号:527240310

    非诚勿扰!

    每天进步一点,每天提升一点!

    展开全文
  • vba正则表达式

    2018-11-28 17:24:46
    vba正则表达式学习文档,涵盖详细的正则语法说明、有具体的功能例子,可做文档查询或实例参考。
  • 昨天我们已经讲过了正则表达式中分组和不分组的情况下匹配的结果的区别,今天我们再来剖析下分组后的执行结果MatchCollection对象。还是昨天的案例:我们看下本地窗口:mat对象集合有count、item、value三个属性。...

    我的目标:让中国的大学生走出校门的那一刻就已经具备这些office技能,让职场人士能高效使用office为其服务。支持我,也为自己加油!

    昨天我们已经讲过了正则表达式中分组和不分组的情况下匹配的结果的区别,今天我们再来剖析下分组后的执行结果MatchCollection对象。

    还是昨天的案例:

    5144385290e19702307f2a2a4f3ea05b.gif

    我们看下本地窗口:

    adacad0610ab39d45f40e9e3621573d6.png

    mat对象集合有count、item、value三个属性。

    664d3ba037cd75d22eb013d0fafb1b0c.png

    同样,SubMatche集合也有count、item、value三个属性,就像父子关系一样,SubMatche是mat的儿子。

    这些属性都是可以利用的。

    代码如下:

    Sub 提取3()

    Dim regx As Object, mat, m, n%

    Set regx = CreateObject("vbscript.regexp")

    With regx

    .Global = True

    .Pattern = "(\d+)\.?([一-龢]+)"

    Set mat = .Execute([a1])

    For n = 0 To mat.Count - 1

    Cells(n + 3, 2) = mat(n).submatches(0)

    Cells(n + 3, 3) = mat(n).submatches(1)

    Next

    End With

    End Sub

    红色部分的含义:直接执行完正则表达式后,mat.count表示匹配成功的条数,所以直接利用一个循环,从0循环到mat.count-1就可以把所有匹配到的内容循环出来,每循环一次就循环出一个item,mat(0)代表mat下面的第一个item,然后mat(n).submatches(0)就表示mat中第一个条目下,submatches中的第一个item的值。

    大家可以通过对比图片和代码来理解。

    通过本节我们对分组又有了更深的了解。

    本节的分享就到这里,鹏哥祝大家每天都有进步。

    聚米为谷

    博学宏才

    如果对VBA感兴趣

    手机端请扫描

    d6e4b098c73d2013ab237a26e3cc07ce.png

    电脑端请登录

    www.mihong.top

    找到《带你走进VBA的世界》

    跟着我一步步学习VBA

    本节的分享就到这里,鹏哥祝大家每天都有进步。34e66130d1891f7d1dd233ebf5f2229d.gif您点的每个赞,我都认真当成了喜欢
    展开全文
  • 前面章节我们见识了正则表达式中元字符的强大,但有时候我们想要匹配的字符串有长度的要求,正则表达式中的量词就是专门为解决这个问题而生的。正则表达式中的量词如下:? 匹配前面的子表达式零次或一次。+ 匹配...

    我的目标:让中国的大学生走出校门的那一刻就已经具备这些Office技能,让职场人士能高效使用Office为其服务。支持鹏哥,也为自己加油!

    前面章节我们见识了正则表达式中元字符的强大,但有时候我们想要匹配的字符串有长度的要求,正则表达式中的量词就是专门为解决这个问题而生的。

    正则表达式中的量词如下:

              匹配前面的子表达式零次或一次。

    +           匹配前面的子表达式一次或多次。

    *            匹配前面的子表达式零次或多次。

    {n}n       是一个非负整数。匹配确定的n次。

    {n,}      n是一个非负整数。匹配确定的n次。

    {n,m}   n和m均为非负整数,其中n<=m。匹配前面子表达式最少n次,最多m次。

    我们通过具体的案例来体会下。

    案例一一:

    5fe8b742b8ab6cb8b104c72481b59118.gif

    图中B列数据姓名之间有的有换行符,有的没有,有的有多个换行符,有的只有一个,我们希望把其整理成右边的格式。

    我们只要匹配出B列每个单元格中的汉字,至少两个字,因为姓名之间有换行符,所以用"\S{2,}"就能匹配出每个姓名来。

    代码如下:

    Sub 规范格式()Dim regx As Object, mat, n%, k, rngSet regx = CreateObject("vbscript.regexp")With regx        .Global = True        .Pattern = "\S{2,}"         For Each rng In [b2:b5]                Set mat = .Execute(rng)                For Each k In mat                n = n + 1                Cells(rng.Row, n + 2) = k                Next                n = 0         NextEnd WithEnd Sub

    向右滑动可以查看完整代码

    当然我们也可以写成.Pattern = "\S+"

    案例二:

    案例二:

    67e896576544f8ab588caf59e8e6bdf3.gif

    把原数据中的“-”统一成两个。

    匹配“-”至少两次

    代码如下:

    Sub 规范格式1()Dim regx As Object, rngSet regx = CreateObject("vbscript.regexp")With regx        .Global = True        .Pattern = "-{2,}"End WithFor Each rng In [a2:a7]Cells(rng.Row, 2) = regx.Replace(rng.Value, "--")NextEnd Sub

    向右滑动可以查看完整代码

    案例三:

    案例三:

    14c99b32429b733735c96b9a0d661d11.gif

    这是前几天一位群友问我的问题,把原数据中连续的8位数字提取出来。

    代码如下:

    Sub 规范格式2()Dim regx As Object, mat, n%, k, rngSet regx = CreateObject("vbscript.regexp")With regx        .Global = True        .Pattern = "\d{8}"         For Each rng In [a2:a5]                Set mat = .Execute(rng)                For Each k In mat                n = n + 1                Cells(rng.Row, n + 1) = k                Next                n = 0         NextEnd WithEnd Sub

    向右滑动可以查看完整代码

    通过上面三个例子,大家应该多量词有所了解了吧!

    本节的分享就到这里,鹏哥祝大家每天都有进步。

    坚持做自己喜欢的事情,时间会证明一切!

    加入米宏Office培训群,每天进步一点点!

    从基础操作到VBA,

    两杯咖啡的钱,

    换取一份如此详细的Excel视频资料,

    你还在犹豫?

    欲购从速,联系微信号:527240310

    非诚勿扰!

    每天进步一点,每天提升一点!

    展开全文
  • 我的目标:让中国的大学...上一节中我们讲过了正则表达式的基础语法,举了一个例子,把A列数据各个部门中的门字去掉,当时写的代码中有一段:Set regx = CreateObject("vbscript.regexp")With regx .Global = True ...

    我的目标:让中国的大学生走出校门的那一刻就已经具备这些Office技能,让职场人士能高效使用Office为其服务。支持鹏哥,也为自己加油!

    上一节中我们讲过了正则表达式的基础语法,举了一个例子,把A列数据各个部门中的门字去掉,当时写的代码中有一段:

    Set regx = CreateObject("vbscript.regexp")

    With regx

        .Global = True

        .Pattern = "门"

    End With

    Pattern = "门",此表达式中的“门”字就是一个普通字符,如果表达式中只是用普通字符的话,那我们用查找功能完全可以匹配目标字符串,为何还要写代码呢?所以正则表达式中还有另外一种字符,叫做元字符

    比如我们在查找时通常会用通配符“*”表示任意字符,在正则表达式中也有一些固定的字符,它们可以表达某一类型的字符,以实现强大的匹配能力。

    下面例举一些常用的元字符:(注意大小写之分)

    \d  匹配一个数字字符

    \D  匹配一个非数字字符

    \w  匹配包括下划线的任何单词字符。[A-Za-z0-9_]

    \W 匹配任何非单词字符

    \s   匹配任何空白字符,包括空格、制表符、换页符等等

    \S  匹配任何非空白字符

    \b  匹配一个单词边界,也就是指单词和空格间的位置

    \B  匹配非单词边界

    \n  匹配一个换行符

    \r   匹配一个回车符

    \t  匹配一个制表符

    .    匹配除"\n"之外的任何单个字符。

    我们通过具体的例子来体会下这些元字符的作用。

    案例1:提取字符串

    04628dd0e96144b5e824acfff7ff8b4b.png

    上图中A列数据把产品和单价写在一起了,有的是单价在产品前面,有的是单价在产品的后面,现在想把他们分开到两列。

    用函数也可以做  但挺麻烦的。如果用正则表达式,只要把每个单元格中的数字匹配出来,然后替换成空就得到了汉字部分了,反之只要把汉字匹配出来替换为空就得到了数字。

    前面我们讲过,在元字符中,\d  匹配一个数字字符,

    代码如下:

    Sub 提取汉字()Dim regx As Object, n%Set regx = CreateObject("vbscript.regexp")With regx    .Global = True    .Pattern = "\d" '匹配数字End WithDon = n + 1Cells(n + 1, 2).Value = regx.Replace(Cells(n + 1, 1).Value, "")Loop Until Cells(n + 1, 1).Value = ""End Sub

    同理,\D  匹配一个非数字字符,我们可以通过“\D”来匹配汉字,把汉字替换成空,得到数字。

    代码如下:

    Sub 提取数字()Dim regx As Object, n%Set regx = CreateObject("vbscript.regexp")With regx    .Global = True    .Pattern = "\D"End WithDon = n + 1Cells(n + 1, 3).Value = regx.Replace(Cells(n + 1, 1).Value, "")Loop Until Cells(n + 1, 1).Value = ""End Sub

    两段代码的运行结果如下:

    777530b70e98782db8d9bfc105aebab3.gif

    如果是字母和汉字放在一个单元格里,我们可以用\W 匹配任何非单词字符,这样就能匹配出字母,替换为空即可得到汉字部分。

    案例2:规范格式

    7c1c8674187ca45713048ace5a6d56a1.gif

    \s   匹配任何空白字符,包括空格、制表符、换页符等等,我们把换行符和空格匹配出来并且全部替换为“-”即可。

    代码如下:

    Sub 规范格式()Dim regx As Object, n%Set regx = CreateObject("vbscript.regexp")With regx    .Global = True    .Pattern = "\s"End WithDon = n + 1Cells(n + 1, 2).Value = regx.Replace(Cells(n + 1, 1).Value, "-")Loop Until Cells(n + 1, 1).Value = ""End Sub

    通过这节课,我们了解了什么是元字符,并且初步体会到了正则表达式的强大之处,后面我们逐步地讲解更加复杂的匹配。

    本节的分享就到这里,鹏哥祝大家每天都有进步。

    加入米宏Office培训群,让学习不再孤单!

    从基础操作到VBA,

    两杯咖啡的钱,

    换取一份如此详细的Excel视频资料,

    你还在犹豫?

    欲购从速,联系微信号:527240310

    每天进步一点,每天提升一点!

    展开全文
  • vba正则表达式基础

    2014-12-23 18:24:28
    vba正则表达式基础知识介绍,由浅入深,实例讲解
  • 正则表达式的基本概念及用途了解之后,我们就来学习下具体的语法,先以一个简单的例子来了解。基础语法:比如,A1单元格中有一串字符:aabbccddaabbcc,我们要把其中的a找到,然后替换成o。代码如下:Sub test()Dim ...
  • 了解了正则表达式的基本概念及用途之后,我们就来学习下具体的用法,先以一个简单的例子来了解下正则到底是怎么用的。案例:比如,A1单元格中有一串字符:aabbccddaabbcc,我们要把其中的a找到,然后替换成o。代码...
  • VBA中并没有直接提供正文表达式对象,需要借助VBScript的正则对象。如果使用前期绑定,那么就需要在VBE中引用如下扩展库:也可以使用后期绑定的方式创建正则对象,代码如下。Set objRegEx = CreateObject("vbscript....
  • 我的目标:让中国的大学生走出校门的那一刻就已经具备这些Office...在正则表达式中确定开始位置字符或者其类型要用脱字符“^”,确定结束位置字符或者其类型要用“$”。比如下面的例子:对A列数据进行筛选。一、以...
  • 根据我们前面几节学习的知识,我们只要利用一个表达式把标题前面的数字和分割符号匹配出来,然后替换为空白就可以了。 元字符“\d”表示任意一个数字,因为案例中数字位数不确定,所以用量词“+”来匹配多位数字,...
  • 昨天我们已经讲过了正则表达式分组和不分组的情况下匹配的结果的区别,今天我们再对分组后的一些属性进行研究。还是昨天的案例:我们看下本地窗口:mat集合下面有count、item、value三个属性。同样,submatches集合...
  • vba 正规表达式应用

    2009-08-08 12:31:08
    vba 正规表达式应用, 简单的正则表达式可是实现复杂的功能.
  • vba 正则表达式

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

    2019-05-11 15:03:01
    dim myreg as object set myreg = createobject(...myreg.pattern="正则表达式(deerchao.net)" set mymatches= myreg.execute(查找内容) for each mymatch in mymatches mymatch.submatches(0) next m...
  • VBA中使用正则表达式,因为正则表达式不是vba自有的对象, 故此要用它就必须采用两种方式引用它:一种是前期绑定,另外一种是后期绑定。前期绑定:就是手工勾选工具/引用中的Microsoft VBScript Regular ...
  • 我的目标:让中国的大学生走出校门的那一刻就已经... 从基础操作到VBA, 两杯咖啡的钱, 换取一份如此详细的Excel视频资料, 你还在犹豫? 欲购从速,联系微信号:527240310 非诚勿扰! 每天进步一点,每天提升一点!
  • 聚米为谷 博学宏才 如果对VBA感兴趣 手机端请扫描 电脑端请登录 www.mihong.top 找到《带你走进VBA的世界》 跟着我一步步学习VBA 本节的分享就到这里,鹏哥祝大家每天都有进步。 您点的每个赞,我都认真当成了喜欢
  • VBA正则表达式的语法与其他语言(如Python)中使用的语法有较大的区别,主要是因为VBA的RegEx对象带有可选参数,因此有时必须指定这些参数以获得与在其他语言中使用标准的正则表达式语法相同的结果。VBA正则表达式语法...
  • 1、正则表达式能干什么呢?你肯定用过excel的“查找”、“替换”功能。正则表达式也可以对字符串进行特定的复杂查找和替换,但它比“查找”和“替换”功能强大的多的多。正在看蓝桥玄霜版主的字典帖,选了其中的两个...
  • 支持win10,没有替换功能,可以替代vba进行的测试工具
  • 第7行代码指定正则匹配字符串,这是应用正则表达式的核心。本文仅对匹配模式进行简单讲解,如果需要系统的学习正则,可以自行搜索相关学习材料。 第8行代码设置为全局搜索模式。 第9行代码第21行代码循环处理工作表...
  • VBA正则表达式入门与提高

    万次阅读 多人点赞 2019-05-10 11:30:37
    精通正则表达式>>专业书籍是世人公认的正则权威著作.但它不太适合初学者,尤其是没有相关编程语言背景及书中所及的种种计算机技术知识的读者.其中很多晦涩难懂的内容在VBA中用不上或者对你来说根本无用的,而...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 690
精华内容 276
关键字:

vba表达式