从 Excel 单元格中删除分隔的重复值

问题描述

我想弄清楚如何从 Excel 单元格中删除重复值。我的列的值用分号分隔。例如,在 A 列中,我有这 3 行,其值如下所示。

3;5;6
2;2;4
9;5;12;12

我想要在相邻列中执行的操作,称为 B 列,有一个返回的公式:

3;5;6
2;4
9;5;12

我需要使用什么公式或函数来实现这一点?

解决方法

以下公式适用于一些有限的条件:

-using >= excel2019 version.
-all numbers in the strings > 0.
-all numbers in the string are integer.
-the maximum number in the string = 10^6

您可以更改 $1:$10$1:$100,..

C2=TEXTJOIN(";",IF(1=FREQUENCY(IFERROR(MATCH(ROW($1:$10),--TRIM(MID(SUBSTITUTE(B2,",REPT(" ",LEN(B2))),(ROW(INDIRECT("A1:A" & 1+ LEN(B2)-LEN(SUBSTITUTE(B2,""))))-1)*LEN(B2)+1,0),1000),IFERROR(MATCH(ROW($1:$10),1000)),ROW($1:$10),""))

enter image description here

,

如果您有 Office 365,那么您可以尝试以下公式,看看它是否能帮助您满足您的要求。

=TEXTJOIN(";",TRUE,(UNIQUE(FILTERXML("<t><d>"&SUBSTITUTE(A2,";","</d><d>")&"</d></t>","//d"))))

对于 FILTERXML 部分,我将建议通过以下 stackoverflow 链接,该链接从基本字符串创建单个元素的数组:

Excel - Extract substring(s) from string using FILTERXML

结构的其余部分非常标准,它使用 UNIQUE 来获取唯一项目的列表,然后我们使用 TEXTJOIN 将它们重新连接在一起。

,

另一种 Office 365 或 Excel 2019 公式解决方案

在 B1 中,向下复制数组 (CSE) 公式:

=TEXTJOIN(";",1,IF(ISNUMBER(FIND(";"&ROW(A$1:A$9999)&";",";"&A1&";")),ROW(A$1:A$9999),""))

enter image description here