Excel如何查找单元格内重复六位数字符串并替换为单个实例
Bates编号重复范围清理方案
以下提供两种可直接落地的实现方式,优先推荐公式方案,复杂场景可使用VBA方案:
方案1:Excel公式实现
适用版本:Excel 365 / 2021及以上
由于所有Bates编号范围均为固定的六位数字-六位数字13字符格式,且默认位于单元格末尾,可直接使用以下公式(待处理内容存放在A1单元格):
=LET( num_part, RIGHT(A1,13), first_num, LEFT(num_part,6), second_num, RIGHT(num_part,6), IF(first_num=second_num, LEFT(A1, LEN(A1)-7), A1) )
公式逻辑说明:
- 提取单元格末尾13位的编号范围片段
- 分别截取横杠前后的6位编号做对比
- 若二者相同则删除末尾的
-XXXXXX共7个字符,否则保留原内容
适用版本:旧版Excel(无LET函数)
可直接展开变量得到兼容公式:
=IF(LEFT(RIGHT(A1,13),6)=RIGHT(RIGHT(A1,13),6), LEFT(A1, LEN(A1)-7), A1)
方案2:VBA自定义函数实现
如果单元格内容格式不固定(比如编号范围不在末尾、前缀存在特殊符号),可使用正则匹配的VBA方案,适配性更强:
- 按
Alt+F11打开VBA编辑器,右键点击当前工作簿名称→「插入」→「模块」 - 粘贴以下代码:
Function CleanBates(inputStr As String) As String Dim regEx As Object Set regEx = CreateObject("VBScript.RegExp") ' 匹配任意位置的相同六位数字重复出现的范围格式 regEx.Pattern = "(\d{6})-\1" regEx.Global = True CleanBates = regEx.Replace(inputStr, "$1") End Function
- 回到表格界面,在空白单元格输入
=CleanBates(A1)即可调用,自动将所有重复的Bates编号范围替换为单个编号。
内容的提问来源于stack exchange,提问作者Livia
相关产品推荐
相关产品推荐

