You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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(动态数组版本直接回车即可)。

  • 原理:
    1. MID(A1,ROW(INDIRECT("1:"&LEN(A1)))*3-2,1):按每3个字符为一组,提取每个()内的单个字符
    2. UNIQUE(...):对提取的字符去重
    3. 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同理。

  • 原理:
    1. 将输入字符串按)(分割成单个字符的数组
    2. 清理数组首尾的多余括号
    3. 利用字典的唯一性存储不重复字符
    4. 将字典的键重新拼接成目标格式的字符串

内容的提问来源于stack exchange,提问作者Joe Chan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 16:10:20