问题描述
我想弄清楚如何从 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),""))
,
如果您有 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),""))