在EXCEL表内遇到有规律性的数据需要提取或者替换时,比如在数据中提取时间,身份证号码等,EXCEL内自带的查找替换就难以实现,我们可以利用VBA适用正则表达式去对数据进行匹配。

什么是正则表达式?

正则表达式,又称规则表达式(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。

下表为正则表达式的元字符和对它们的一个简短的描述,新手可以百度下看下教程,不建议死记硬背,多做练习后更容易懂。

常用的正则表达式:

匹配手机号码:1[3|4|5|7|8][0-9]{9}

匹配身份证号(15位):\d{14}[[0-9],0-9xX] ;身份证号(18位):\d{17}(\d|X|x)

匹配邮箱地址:[\w!#$%&'*+/=?^_`{|}~-]+(?:\.[\w!#$%&'*+/=?^_`{|}~-]+)*@(?:[\w](?:[\w-]*[\w])?\.)+[\w](?:[\w-]*[\w])?

匹配(年-月-日)格式日期:([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})-(((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)-(0[1-9]|[12][0-9]|30))|(02-(0[1-9]|[1][0-9]|2[0-8])))

匹配3位以上数字:[1-9][0-9]{2,}

匹配字符串之间的字符:前面的字符(.*?)后面的字符,比如abc123def ,需要匹配abc和def之间的字符的表达式就是abc(.*?)def

在VBA使用正则表达式代码如下:

Sub re()
Application.ScreenUpdating = False
Set oRegExp1 = CreateObject("vbscript.regexp")
re = InputBox("请输入正则表达式")
if re="" then exit sub
With oRegExp1.Global = True.IgnoreCase = True.Pattern = re
End WithFor Each Rng In Selectionif Rng <>"" thenSet a = oRegExp1.Execute(Rng)For j = 0 To a.Count - 1IF j=0 thenb = a(j)elseb = b & "," & a(j)end ifNextRng.Value = bb = ""end if
Next
Application.ScreenUpdating = true
End Sub

例如在下面的产品名称内需要提取TM-xxx这个型号,则正则表达式为:TM-[0-9]{3,} (TM-为开头字符串加上3个数字以上)

选择需要提取的A列数据,运行VBA,在输入框内输入正则表达式,确认后就可以得到结果:

结果如下:

若有多个结果会以,号隔开放回结果。

另:正则表达式在线测试平台:http://tool.oschina.net/regex/

EXCEL VBA 使用正则表达式清洗替换数据相关推荐

  1. Excel·VBA多行多列数据简单汇总

    目录 1,多行多列数据简单汇总 举例 2,数据汇总函数化.通用化 match函数 举例1 举例2 3,字典嵌套字典汇总数据 举例 不同于之前写过的 <Excel·VBA统计表生成函数及应用实例& ...

  2. python特殊符号请求参数_python-参数化-(3)(excel中特殊标识字符替换数据)

    一.在读取excel文件.其他数据来源会遇到一些无法转换或者特殊标记的字符串等,不能直接使用.这时候 1.replace() str.replace(old,new[,max]) old -- 将被替 ...

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

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

  4. excel VBA chr(63)无法替换问题

    在Excel中不可见字符用ASC查为63,用chr(63)进行替换不成功 用正则s匹配也不成  实测为unicode字符160 用ASCW函数可以求 还原用CHRW函数 VBA可以  对选择单进行替换 ...

  5. 8 excel vba 往多行写入数据

    我们都知道, 一个表格里有很多个单元格. 由前面可知,我们要往一个单元格里写入数据,首先就要获得这个单元格的引用. 这样程序才知道在哪里写入数据. 比如我们要往单元格 A1 写入数据, 可以用 ran ...

  6. Excel VBA 指定区域内的数据 导出为图片

    Sub ExportChart()     Application.ScreenUpdating = False          Dim ChartPath As String     Dim ra ...

  7. Excel vba使用正则表达式处理联通官网导出的通话详单

    目前还存在一个小问题,re.Pattern = "([0-9]*)\u5206"中的括号不管用,执行Execute之后的字符串仍然包含"分"这个字符,也就是\u ...

  8. Excel vba开发 合并单元格拆分自动填充功能、在每一条数据后面插入空白行、将地理坐标的经纬度转换成度等功能

    写在前面: 最近老大丢给我一个数据量比较大,比较复杂的表,让我用VB去处理,刚被分到这个任务的时候一脸茫然,对Excel VB开发一点都不了解,所以就自己研究并查资料,最后终于解决了. 一.Excel ...

  9. vba 用adodb连接mysql_【VBA研究】Excel VBA利用ADODB访问数据库使用小结

    [转自] http://blog.csdn.net/iamlaosong/article/details/18043433 作者:iamlaosong ▲连接Oracle数据库 Set cnn = C ...

最新文章

  1. shell编程中for/while/util/case/select/break/continue
  2. [CODEVS 1244] 云中通信
  3. webpack-plugin-webpack.DefinePlugin-应用全局变量,svn-rep-browser
  4. java dwr实现消息推送_dwr消息推送
  5. 命令行调用VS编译器
  6. HTML5 main元素
  7. 关于Maven项目build时出现No compiler is provided in this environment的处理
  8. java web基础 --- URL重定向Filter
  9. 机器学习(一) Eviews下载及安装教程
  10. 手机客户端(EZview/智U)添加设备时,为什么会提示“该设备已被其他账号添加”?
  11. Noisy machines: understanding noisy NNs and enhancing robustness to analog hardware errors
  12. Bert预训练新法则
  13. 聚合和分组F,Q和事物,cookie,session
  14. 骞云科技SmartCMP v3.5版本正式发布
  15. 这就是2020:全球云计算十一大年度话题盘点
  16. 帝国cms php超时,帝国CMS二次开发基本问题汇总
  17. js-cookie 安卓上不好使
  18. TCP传输的终极秘密
  19. 预防网络诈骗PPT模板
  20. 系统多个版本excel的切换

热门文章

  1. 交换机多端口命令模式一起配置
  2. 笔记本不能用无线网策略服务器,笔记本不能上网的解决方法适用于使用无线路由器上网...
  3. 【OR】YALMIP 二阶锥规划
  4. 关于MySQL认证的东东
  5. ModuleNotFoundError: No module named ‘torchvision.ops‘
  6. mac node如何升级版本
  7. Linux下批量重命名文件或文件夹(rename命令)
  8. JS字符串和数字相加结果是什么?
  9. 基于stm32的智能小车设计(一)
  10. SCI论文发表中需要经历哪些过程?