首先分析需求,对于一个单元格的字符串,我们希望去掉字符串最后的一串数字,如果数字前是下划线"_",也去掉。例如:
abc_1处理之后应该是abc
abc_d1处理之后应该是abc_d
abc1_23处理之后应该是abc1
要修改这样的数据,只需要去掉末尾符合要求的字符串即可。所以使用正则表达式查找符合要求的字符串,再使用replace方法将其替换掉。
一、正则表达式
首先,匹配数字使用[0-9],或者\d(此处我使用\d)。一串数字说明不止一位数字,所以需要使用正则表达式中的限定符"+”匹配前面的子表达式一次或多次(此时得出匹配最后一串数字的正则表达式是\d+)。
接着,数字前面如果存在"_"也要去掉,所以使用限定符"?"匹配前面的子表达式零次或一次(此时得出匹配最后一串数字的正则表达式是_?\d+)。
最后,只需要去掉末尾的符合条件的字符串,所以使用定位符"$"匹配输入字符串结尾的位置。得出表达式为_?\d+$。
二、EXCEL使用VBA自定义函数
1.使用正则表达式
VBA使用正则表达式,创建代码如下(示例):
With CreateObject("vbscript.regexp")
.Global = True
.Pattern = 正则表达式
End With
2.打开EXCEL宏
点击开发工具,选择VB宏,创建模块,如下图所示:
图一
图二
3.定义函数
创建代码如下(示例):
Function splitlastnumber(str As String)
'正则表达式
With CreateObject("vbscript.regexp")
.Global = True
.Pattern = "_?\d+$"
splitlastnumber = .Replace(str, "")
End With
End Function
保存函数。在sheet中选中单元格,插入函数(此处我的命名是splitlastnumber),在全部函数里面查找,选择自定义的函数,
图三
图四
处理列1的数据,将替换后的数据在列2展示出来。
图五
至此,完成替换。
总结
本篇记录了在excel中使用VBA宏,以及VBA宏中的函数实现、Replace的用法和正则表达式的使用。完成了去掉字符串末位数字,和数字前的下划线的需求。