抑郁症健康,内容丰富有趣,生活中的好帮手!
抑郁症健康 > Excel·VBA自定义正则表达式函数 使用

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

时间:2020-05-02 02:51:40

相关推荐

目录

正则表达式替换函数应用1,提取1个字母+10个数字应用2,中英文分割应用3,提取11位手机号应用4,指定文字替换应用5,提取最后一个括号的内容应用6,提取所有括号的内容应用7,提取地址中的省、市、县、乡应用8,仅保留数字和符号应用9,提取单价(整数、浮点数) 正则表达式获取函数应用1,提取品名、型号应用2,提取数字、运算符

正则表达式替换函数

正则表达式在线测试-菜鸟工具

Function RE(ByVal source_str$, pat$, Optional replace_str$ = "$1")'通用正则替换函数,函数定义RE(字符串,正则模式,替换值)对字符串返回正则替换后的字符串'可在表格中使用,仅适用单个单元格With CreateObject("vbscript.regexp") '正则表达式.Global = True.Pattern = patRE = .Replace(source_str, replace_str)End WithEnd Function

应用1,提取1个字母+10个数字

《excel吧提问-提取共同特征的数据》

正则:.*([a-zA-Z]\d{10}).*

应用2,中英文分割

《excel吧提问-中英文分离》

正则:提取中文[a-zA-Z]*或[^\u4e00-\u9fa5]*或([a-zA-Z]+)正则:提取英文[^a-zA-Z]*或[\u4e00-\u9fa5]*或.*?([a-zA-Z]+).*

应用3,提取11位手机号

《excel吧提问-提取11位手机号》

正则:.*(\d{11}).*

应用4,指定文字替换

《excel吧提问-将一列内容引入到另一列内容中间》

正则:([a-zA-Z]\d+)

应用5,提取最后一个括号的内容

《excel吧提问-单元格字数不等,括号个数不等,怎么截取最后一个括号的内容》

正则:.*(?=\()

应用6,提取所有括号的内容

正则:.*?(\(.*?\))

应用7,提取地址中的省、市、县、乡

《wps吧提问-如何将省市县乡分列显示》

正则:(.*?(省|市|自治区))?(.*?(市|区|自治州|盟|地区))?(.*?(县|市|区|旗))?(.*?(乡|镇|街道))?(.*)

注意:直辖市地址应如下图所示写法

参考资料:

《百度百科-地级行政区》

《百度百科-县级行政区》

应用8,仅保留数字和符号

《excel吧提问-如何去除单元格中的文字、字母,只保留数字和标点符号》

正则:[^\d-,]

注意:文中为中文逗号

应用9,提取单价(整数、浮点数)

《excel吧提问-如何提取里面的单价》

正则:.*?(\d+(\.\d+)?)元.*

正则表达式获取函数

Function RE_execute(source_str As String, pat As String)'通用正则获取函数,函数定义RE_execute(字符串,正则模式)对单元格返回正则获取后的字符串数组Dim result, i&, num&With CreateObject("vbscript.regexp") '正则表达式.Global = True.Pattern = patSet mhs = .Execute(source_str)num = mhs.countIf num = 0 Then RE_execute = "": Exit FunctionReDim result(1 To num)For i = 0 To num - 1result(i + 1) = mhs(i).ValueNextRE_execute = resultEnd WithEnd Function

应用1,提取品名、型号

《excel吧提问-提取品名、型号》

Sub 品名型号()Dim s$, rng, r '一定要定义类型,否则报错“ByRef参数类型不符”Set rng = Intersect(ActiveSheet.UsedRange, Selection) 'intersect语句避免选择整列造成无用计算If rng.Columns.count > 1 Then Debug.Print "仅支持单列": Exit Sub '仅支持单列,多列则退出For Each r In rngs = r.Valueresult = RE_execute(s, "[A-Za-z0-9/-]+")If IsArray(result) Then r.Offset(0, 2).Resize(1, UBound(result)) = resultNextEnd Sub

应用2,提取数字、运算符

《excel吧提问-提取数字、运算符》

该正则匹配十分暴力,适用整数、小数的 A*B*C=D 形式

Sub 数字运算符()Dim s$, rng, r '一定要定义类型,否则报错“ByRef参数类型不符”Set rng = Intersect(ActiveSheet.UsedRange, Selection) 'intersect语句避免选择整列造成无用计算If rng.Columns.count > 1 Then Debug.Print "仅支持单列": Exit Sub '仅支持单列,多列则退出For Each r In rngs = r.Valueresult = RE_execute(s, "\d+(\.\d+)?\*\d+(\.\d+)?\*\d+(\.\d+)?\=\d+(\.\d+)?")If IsArray(result) Then r.Offset(0, 2).Resize(1, UBound(result)) = resultNextEnd Sub

如果觉得《Excel·VBA自定义正则表达式函数 使用》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。