该自定义函数可使用多个正则表达式对目标单元格进行多次匹配尝试,如匹配成功,将停止尝试匹配其他正则表达式,并且使用该正则表达式相对应的替换表达式进行替换,返回替换结果。

您可以直接下载包含该函数代码的XLSM文件,打开并启用宏之后,就可以直接使用该函数:http://url.cn/5WVPvgT

使用方法为:

Text参数:需要进行处理的原始文字或单元格。

MatchPatternRange参数:正则表达式组所在的单元格范围。请将多个正则表达式存放在表格中的一行或一列内,作为MatchPatternRange参数传入。

ReplacePattern参数:每个正则表达式相对应的替换字串符所在的单元格范围。请将用来作替换的文字放在正则表达式隔壁的行或列内,作为ReplacePatternRange参数传入。

IgnoreCase参数:在查找时是否忽略大小写,默认值为True,即忽略大小写区别。

如需在输入函数时获取参数提示,可以按Shift+F3,打开插入函数对话框,并在函数类别(category)中找到用户自定义(User Defined),在下方文本框中找到RangeRegexReplace,再点击OK,就会弹出参数输入辅助界面。

 

如果您想学习一下如何自己插入VBA源代码,可以按照以下方法将下文中的VBA代码插入Excel工作簿:

先在Excel中按Alt+F11,进入VBE编辑器。然后在左侧找到需要插入代码的工作簿(Workbook)的名称。如果VBE编辑器左侧看不到这一块Project小窗口,可以试试看按Ctrl+R。

在下图中,我希望在工作簿Book1中插入代码,所以就选中了VBAProject (Book1)这一层。

右键单击该工作簿名称,依次点击Insert -- Module。

这时VBE左侧就会多出一个Module1,双击该Module1,在右侧代码输入界面中,将本文下面的代码复制粘贴进去。

本自定义函数由于使用了第三方库,使用前需要做Early Binding:即在VBE编辑器中,选择菜单栏中的Tool — Reference:

弹出如下图的对话框后,选择Microsoft VBSscript Regular Expression 5.5,打钩,点OK。

最后按Ctrl+S保存文件,注意在保存对话框中,文件类型需要选择“Excel启动宏的工作簿(*.xlsm)”,如下图

Function RangeRegexReplace(ByVal Text As String, ByVal MatchPatternRange As Range, _ByVal ReplacePatternRange As Range, Optional ByVal IngoreCase As Boolean = True) As String'By Jing He 2017-9-1
'Last update 2017-9-2Dim count As Integer, x As Integer, i As Integer, j As Integer
Dim pattern() As String, replace() As StringIf MatchPatternRange.count <> ReplacePatternRange.count ThenRangeRegexReplace = "Numbers of cells in MatchPatternRange and ReplacePatternRange are not equal."Exit Function
End Ifcount = MatchPatternRange.count
ReDim pattern(0 To count - 1) As String
ReDim replace(0 To count - 1) As Stringi = 0
For Each c In MatchPatternRangepattern(i) = c.Valuei = i + 1
Next cj = 0
For Each c In ReplacePatternRangereplace(j) = c.Valuej = j + 1
Next c'Give no match value
RangeRegexReplace = "-"Dim regex As New RegExp
With regex.Global = True.MultiLine = True.IgnoreCase = IngoreCase
End WithFor x = 0 To count - 1 Step 1regex.pattern = pattern(x)If regex.Test(Text) ThenRangeRegexReplace = regex.replace(Text, replace(x))Exit ForEnd If
Next xEnd Function

顺便附带一个使用单个正则表达式进行查找替换的自定义函数,使用这个函数时,正则表达式可以直接写入公式的参数内,不需要放在单元格内再去引用。

Function RegexReplace(ByVal Text As String, ByVal MatchPattern As String, _
  ByVal ReplacePattern As String, Optional ByVal IngoreCase As Boolean = True) As String

'By Jing He 2017-9-1Dim regex As New RegExpWith regex.Global = True.MultiLine = True.IgnoreCase = IngoreCase.pattern = MatchPattern
End WithIf regex.Test(Text) ThenRegexReplace = regex.replace(Text, ReplacePattern)
ElseRegexReplace = "-"
End IfEnd Function

转载于:https://www.cnblogs.com/hejing195/p/7465287.html

一个可以使用多个正则表达式进行多次尝试匹配、替换或提取的Excel VBA自定义函数(UFD)...相关推荐

  1. 构建一个轻量级的嵌入式虚拟平台,开发工程用板stm32 picoc解释器,大量自定义函数,sarm拓展,lwip移植,nes模拟器移植,系统优化,等等技术的融合

    让嵌入式想java一样一处编写到处运行 第一次写博客,其实接触嵌入式已经快两年了,从开始学51单片机的时候,怀着满腔的热情.写出了点亮第一个流水灯代码的时候那个无比的激动,到后面自己做许多有趣的东西( ...

  2. Excel·VBA自定义正则表达式函数、使用

    目录 正则表达式替换函数 应用1,提取1个字母+10个数字 应用2,中英文分割 应用3,提取11位手机号 应用4,指定文字替换 应用5,提取最后一个括号的内容 应用6,提取所有括号的内容 应用7,提取 ...

  3. python自定义函数求差_[VBA]发布一个计算桩号之差的Excel自定义函数(VBA)

    这是一个可以计算桩号之差(也就是得到长度)的Excel(或WPS)扩展函数,可以减少工程师在统计工程量时的工作量. 该函数具有一定的通用性.可以在MS Office和金山WPS上使用. 文末会给出使用 ...

  4. js进阶正则表达式10-分组-多行匹配-正则对象的属性(小括号作用:分组,将小括号里面的东西看成一个整体,因为量词只对前一个字符有效)(多行匹配:m)(属性使用:reg.global)...

    js进阶正则表达式10-分组-多行匹配-正则对象的属性(小括号作用:分组,将小括号里面的东西看成一个整体,因为量词只对前一个字符有效)(多行匹配:m)(属性使用:reg.global) 一.总结 1. ...

  5. 使用canvas建立一个可以使用彩笔、橡皮檫的画板

    使用canvas建立一个可以使用彩笔.橡皮檫的画板 我参加了一个web学习班,因为了解到写博客可以有效提高我的知识掌握水平,所以决定从我学习的内容来入手,废话不多说,开始今天的学习. 首先我们要在&l ...

  6. (九) 正则表达式——文本处理(用s///替换、split与join函数、列表上下文中的m//、非贪婪量词、文件更新等)

    文章目录 一.s///替换 1.1.替换的规则要点 1.2.代码示例 二.split与join函数--字符串拆分与组合 三.列表上下文中的m// 四.非贪婪量词--加问号(?) 五.跨行的模式匹配-- ...

  7. 正则表达式 python 没有则不匹配_python中关于正则表达式二

    2.2 反向引用 \1, \2... 表达式在匹配时,表达式引擎会将小括号 "( )" 包含的表达式所匹配到的字符串记录下来.在获取匹配结果的时候,小括号包含的表达式所匹配到的字符 ...

  8. 正则表达式,字符串匹配、搜索、替换

    str正则表达式,常常缩写为 "regex" 或 "regexp",是帮助程序员匹配.搜索和替换文本的模式. 1.匹配字符 myWant = /code/; / ...

  9. 一篇认真的正则入门文章:正则表达式数字和数字范围匹配表达

    文章目录 正则表达式中的数字 \ d用于单个或多个数字 两位数或三位数匹配 正则表达式0-9 正则表达式1到9 正则表达式0到10 正则表达式1到10 正则表达式1到12 正则表达式1到16 正则表达 ...

最新文章

  1. VMware HA实战攻略之五VMwareHA测试验收
  2. 基于FPGA的UART接口协议设计
  3. 【若依(ruoyi)】table定制列宽
  4. 深度学习(二十四)——L2 Normalization, Attention(1)
  5. 《Python Cookbook 3rd》笔记(2.17):在字符串中处理html和xml
  6. Composer更新慢的终极解决方案-转
  7. java spliterator,Java 8 之Stream Spliterator
  8. GlusterFS分布式文件系统
  9. C语言小游戏,编程入门必看,初级扫雷
  10. OpenCV——图像细化算法
  11. 麻省理工学院:科技宠儿的摇篮
  12. 以一元及二元函数为例,通过多项式的函数图像观察其拟合性能;以及对用多项式作目标函数进行机器学习时的一些理解。
  13. 结婚5年又发现了一场爱情 感人
  14. 云服务器cms与云虚拟主机区别,虚拟主机和云服务器哪个好?分别有什么优势
  15. Hypervisor介绍(二)
  16. 如何关闭iPhone浏览器自动将数字识别为电话号码
  17. 时间都去哪儿了,你又想让它去哪儿
  18. 【Redis实战】认识Redis中的全局哈希表
  19. 【数据结构】顺序表和链表的优缺点
  20. 青岛大学计算机专业春考,青岛大学春季高考专业

热门文章

  1. 安卓:Fragment的懒加载
  2. 精选微软等公司数据结构+算法经典面试100题[1-80题]
  3. EXCEL比较麻烦零碎的日期数据的处理,数字转日期,日期转数字
  4. 小米MIX 2S简单刷入开发版开启Root权限的步骤
  5. 摩托罗拉v980显示服务器,摩托罗拉v980手机充电器我有一个摩托罗拉 – 手机爱问...
  6. 什么运营商劫持?运营商劫持分几种?解决办法都有什么?
  7. 工程项目管理软件的对比思考
  8. Apache calcite Quickstart
  9. 移动数字化平台赋能新型智慧城市建设
  10. Java后端实现人脸识别(基于虹软ArcSoft)