如何过滤单元格中的重复字符串?能否应用FILTER函数实现?
单个单元格内容去重:用FILTER及其他可行方案
当然可以用FILTER来实现单个单元格内的重复字符串移除需求!不过得先把单元格里的逗号分隔文本转换成可处理的数组,再配合函数完成去重。之前你用UNIQUE+TEXTJOIN没成功,大概率是拆分时的分隔符没匹配对,或者数组生成有问题。下面给你详细的解决方案:
方案1:修正后的UNIQUE+TEXTJOIN(最简单高效)
先解决你之前的问题——如果你的目标单元格是A1,内容是Tomato, Potato, Beef, Tomato, Salmon, Beef(逗号后带空格),正确的公式应该是:
=TEXTJOIN(", ", TRUE, UNIQUE(TEXTSPLIT(A1, ", ")))
拆解一下:
TEXTSPLIT(A1, ", "):把A1的内容按,(逗号加空格)拆分,生成一个包含所有元素的数组UNIQUE():对这个数组去重,自动保留每个元素的首次出现TEXTJOIN(", ", TRUE, ...):把去重后的数组重新用,拼接成连贯文本
如果你的单元格里是纯逗号分隔(没有空格),只要把公式里的", "换成","就行。
方案2:用FILTER实现去重(满足你的需求)
如果你确实想用FILTER来完成,我们可以结合MATCH和SEQUENCE来定位首次出现的元素,筛选出唯一值:
=LET( arr, TEXTSPLIT(A1, ", "), first_occur, MATCH(arr, arr, 0), unique_items, FILTER(arr, first_occur = SEQUENCE(ROWS(arr))), TEXTJOIN(", ", TRUE, unique_items) )
解释一下:
LET():给中间变量命名,让公式更简洁易读,避免重复拆分单元格内容arr:存储拆分后的所有元素数组first_occur:记录每个元素在数组中首次出现的位置FILTER(arr, first_occur = SEQUENCE(ROWS(arr))):筛选出那些首次出现位置等于自身序号的元素(也就是只保留第一次出现的元素)- 最后用TEXTJOIN把筛选后的唯一元素拼接成最终文本
版本兼容提醒
以上公式适用于Excel 365/2021及以后版本,因为用到了TEXTSPLIT、LET这些新函数。如果是旧版Excel,得用MID+ROW的组合来手动拆分文本,再配合去重逻辑,不过操作会麻烦很多,建议尽量升级到新版。
内容的提问来源于stack exchange,提问作者Artur Müller Romanov




