MS Power Query实现Excel分隔值合并去重并排除指定值
Excel合并去重并排除指定值解决方案
方法1:动态数组公式(适用于Excel 365/2021及以上版本)
仅合并去重(无排除需求)
在目标单元格输入以下公式:
=TEXTJOIN(", ", TRUE, UNIQUE(TEXTSPLIT(TEXTJOIN(",", TRUE, A1:A2), ",")))
逻辑说明:
TEXTJOIN(",", TRUE, A1:A2):将A1、A2的内容合并为单个字符串TEXTSPLIT(..., ","):把合并后的字符串按逗号拆分为数组UNIQUE(...):对数组去重TEXTJOIN(", ", TRUE, ...):将去重后的数组重新合并为带空格分隔的字符串
合并去重并排除指定单元格的值(如B1)
在目标单元格输入以下公式:
=TEXTJOIN(", ", TRUE, UNIQUE(FILTER(TEXTSPLIT(TEXTJOIN(",", TRUE, A1:A2), ","), ISNA(XMATCH(TEXTSPLIT(TEXTJOIN(",", TRUE, A1:A2), ","), TEXTSPLIT(B1, ",")))))
逻辑说明:
在合并去重的基础上,增加筛选逻辑:
TEXTSPLIT(B1, ","):拆分B1的排除值为数组XMATCH(...):检查合并数组中的值是否存在于排除数组,不存在则返回#N/AISNA(...):将#N/A转换为TRUE,用于FILTER筛选出不需要排除的值
方法2:VBA宏(适用于所有Excel版本)
如果你的Excel版本不支持动态数组函数,可通过自定义函数实现:
- 按
Alt + F11打开VBA编辑器 - 右键点击当前工作簿 → 插入 → 模块
- 将以下代码粘贴到模块窗口:
Function MergeUniqueExclude(rngMerge As Range, rngExclude As Range) As String Dim dict As Object Set dict = CreateObject("Scripting.Dictionary") Dim cell As Range Dim arr As Variant Dim i As Integer ' 读取合并区域数据,存入字典实现去重 For Each cell In rngMerge If cell.Value <> "" Then arr = Split(cell.Value, ",") For i = LBound(arr) To UBound(arr) dict(Trim(arr(i))) = "" End If End If Next cell ' 移除需要排除的值 If Not rngExclude Is Nothing Then For Each cell In rngExclude If cell.Value <> "" Then arr = Split(cell.Value, ",") For i = LBound(arr) To UBound(arr) If dict.Exists(Trim(arr(i))) Then dict.Remove Trim(arr(i)) End If End If End If Next cell End If ' 合并最终结果 MergeUniqueExclude = Join(dict.Keys, ", ") End Function
- 返回工作表,在目标单元格输入公式:
- 仅合并去重:
=MergeUniqueExclude(A1:A2, "") - 合并去重并排除B1:
=MergeUniqueExclude(A1:A2, B1)
- 仅合并去重:
内容的提问来源于stack exchange,提问作者Siddhesh Ghirnikar
相关产品推荐
相关产品推荐

