首页 > 解决方案 > 从单元格中的列表中提取重复项

问题描述

我需要帮助从单元格中的逗号分隔列表中提取重复项。我可以走很长的路,但如果可能的话,我需要一条捷径。

这里有两个例子:

例如,

A1: 1,4,4,6,10,58   
Result in B1: 4,4

A2: 5,5,10,55,70,70,76
Result in B2: 5,5,70,70

谢谢你的帮助。*我有 Excel 2016。

标签: excelvbaexcel-formula

解决方案


尝试,如果有TEXTJOIN(可从 Excel 2019 获得):

=TEXTJOIN(",",,FILTERXML("<t><s>"&SUBSTITUTE(A1,",","</s><s>")&"</s></t>","//s[preceding::*=. or following::*=.]"))

在 Excel 2016 中,您可以创建自己的 UDF:

Function Dupes(str As String) As String
    With Application
        Dupes = Join(.Transpose(.FilterXML("<t><s>" & Replace(str, ",", "</s><s>") & "</s></t>", "//s[preceding::*=. or following::*=.]")), ",")
    End With
End Function

如您所见,只要您得到了语法,语法就保持不变FILTERXML(可从 Excel 2013 获得)。


通过你提到的评论,你不需要知道重复两次。一次就足够了,因此您可以XPATH稍微更改语法以:

=FILTERXML("<t><s>"&SUBSTITUTE(A1,",","</s><s>")&"</s></t>","//s[preceding::*=. ][not(following::*=.)]")

您可以在 UDF 中执行相同的操作。如果这激发了您的兴趣,那么您可能会喜欢SO 上的这篇文章,以获取有关如何使用FILTERXML重做分隔字符串的更多想法。


推荐阅读