excel - 从单元格中的列表中提取重复项

标签 excel vba excel-formula

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

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。

最佳答案

试试,如果有 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 中执行相同的操作。如果这激发了您的兴趣,那么您可能会喜欢 this在 SO 上发布更多关于如何使用 FILTERXML 的想法重做分隔的字符串。

关于excel - 从单元格中的列表中提取重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63101204/

相关文章:

vba - 使用 2D 数组进行 Redim

Excel:如何复制/粘贴条件格式,就好像条件是 "value"一样?

Excel VBA FOR LOOP 在第 1000 次崩溃

vba - Excel 无法启用引用/缺少函数

vba - 任务计划程序不运行 Excel VBA 代码以将 PDF 作为电子邮件附件发送

arrays - 存在过滤器时使用数组设置范围的值

excel - "=+IF(...)"在 Excel 中有什么作用吗?

excel - 如何列出Excel中三列中值的所有可能组合?

excel - 如果是季度的第 1 2 3 个月,如何识别 Excel 中的公式?

python - 如何在 pandas 中处理带有超链接/url 的 excel 文件?