Excel单元格重复带括号字符去重:公式与VBA实现咨询
Excel公式实现方法
针对单元格内以(字符)格式重复的内容,可通过提取子串+去重+拼接的组合公式完成需求:
适用于Excel 365/2021(支持UNIQUE和TEXTJOIN函数)
假设处理A1单元格,在空白单元格(比如B1)输入以下公式:
=TEXTJOIN("",TRUE,"("&UNIQUE(MID(A1,ROW(INDIRECT("1:"&LEN(A1)))*3-2,1))&")")
输入后按Ctrl+Shift+Enter(动态数组版本直接回车即可)。
- 原理:
MID(A1,ROW(INDIRECT("1:"&LEN(A1)))*3-2,1):按每3个字符为一组,提取每个()内的单个字符UNIQUE(...):对提取的字符去重TEXTJOIN("",TRUE,"("&...&")"):将去重后的字符重新用()包裹并拼接成字符串
兼容旧版Excel(无UNIQUE函数)
如果是旧版Excel,可使用数组公式结合INDEX、MATCH实现去重:
=TEXTJOIN("",TRUE,"("&INDEX(MID(A1,ROW(INDIRECT("1:"&LEN(A1)))*3-2,1),MATCH(0,COUNTIF($B$1:B0,MID(A1,ROW(INDIRECT("1:"&LEN(A1)))*3-2,1)),0))&")")
注意:输入后需按Ctrl+Shift+Enter作为数组公式执行,公式中的$B$1:B0需根据输入单元格调整(比如在B1输入时保留此引用,初始为空)。
VBA自定义函数实现
按Alt+F11打开VBA编辑器,插入新模块,粘贴以下代码:
Function RemoveDuplicateItems(rng As Range) As String Dim inputStr As String Dim charArr() As String Dim i As Integer Dim tempDict As Object Dim resultStr As String Set tempDict = CreateObject("Scripting.Dictionary") inputStr = rng.Value ' 按"(字符)"分割字符串 charArr = Split(inputStr, ")(") ' 处理第一个元素的开头括号 charArr(0) = Mid(charArr(0), 2) ' 处理最后一个元素的结尾括号 charArr(UBound(charArr)) = Left(charArr(UBound(charArr)), Len(charArr(UBound(charArr))) - 1) ' 遍历数组去重 For i = 0 To UBound(charArr) If Not tempDict.Exists(charArr(i)) Then tempDict.Add charArr(i), "" End If Next i ' 拼接结果 resultStr = "(" & Join(tempDict.Keys, ")(") & ")" RemoveDuplicateItems = resultStr End Function
保存后回到Excel,在空白单元格输入=RemoveDuplicateItems(A1)即可得到去重后的结果,A2同理。
- 原理:
- 将输入字符串按
)(分割成单个字符的数组 - 清理数组首尾的多余括号
- 利用字典的唯一性存储不重复字符
- 将字典的键重新拼接成目标格式的字符串
- 将输入字符串按
内容的提问来源于stack exchange,提问作者Joe Chan
相关产品推荐
相关产品推荐

