删除Excel单元格内的重复项

说我在一个Excel单元格中有以下文本string:

John John John Mary Mary 

我想创build一个公式(所以没有菜单function或VBA,请),将在另一个单元格给我

 John Mary 

我怎样才能做到这一点?

我到目前为止所尝试的是search互联网和SO关于这个问题,所有我能find的解决scheme涉及Excel的内置重复删除或涉及countif和更换重复"" 。 我也看了一下Excel函数的列表,尤其是那些“文本”类的函数,但找不到任何有趣的东西,可以在一个单元格中完成。

答案在这里: https : //www.extendoffice.com/documents/excel/2133-excel-remove-duplicate-characters-in-string.html

 Function RemoveDupes2(txt As String, Optional delim As String = " ") As String Dim x 'Updateby20140924 With CreateObject("Scripting.Dictionary") .CompareMode = vbTextCompare For Each x In Split(txt, delim) If Trim(x) <> "" And Not .exists(Trim(x)) Then .Add Trim(x), Nothing Next If .Count > 0 Then RemoveDupes2 = Join(.keys, delim) End With End Function 

把上面的代码放在一个模块中

使用=remove(A2,",") A2包含分隔的重复文本,您可以更改分隔符

正如我写的,使用VBA解决这个问题是微不足道的。 如果你不能使用VBA,一种方法是使用帮助列。

假设:你的string在A1中

input以下公式:

 C1: =IFERROR(INDEX(TRIM(MID(SUBSTITUTE($A$1," ",REPT(" ",99)),(ROW(INDIRECT("1:" & LEN($A$1)-LEN(SUBSTITUTE($A$1," ",""))+1))-1)*99+((ROW(INDIRECT("1:" & LEN($A$1)-LEN(SUBSTITUTE($A$1," ",""))+1))=1)),99)),ROWS($1:1),1),"") D1: =IF(COUNTIF(C1:$C$5,C1)=1,C1,"") 

selectC1和D1并填写,直到你开始空白

 E1: =D1 E2: =TRIM(CONCATENATE(D2," ",E1)) 

selectE2并填写。

E列中最后一个单元格的内容将是您的结果。

如果你想有一个单元格,它会自动返回E列中最后一个单元格的内容,你可以使用如下公式:

 =LOOKUP(REPT("z",99),$E$1:$E$100) 

如果没有公式:以空格作为分隔符的文本到列,转置输出,单独应用删除重复项到每个列,然后转置结果。

假设在一个单元格中永远不会有两个以上不同的名字,这应该工作:

 =MID(A1&" ",1,FIND(" ",A1&" "))& MID(SUBSTITUTE(A1&" ",MID(A1&" ",1,FIND(" ",A1&" ")),"")&" ",1, FIND(" ",SUBSTITUTE(A1&" ",MID(A1&" ",1,FIND(" ",A1&" "))&" ",""))) 

它会显示John Mary所有这些:

 John John John Mary Mary John Mary John Mary John Mary John Mary Mary John John Mary 

这将显示John所有这些:

 John John John John John John 

如果A1是空白的,它将不显示。