删除Excel单元格中的重复项

时间:2014-09-17 18:06:12

标签: excel duplicates excel-formula cell duplicate-removal

假设我在一个Excel单元格中有以下文本字符串:

John John John Mary Mary

我想在另一个单元格上创建一个公式(所以没有菜单功能或VBA),这会给我一个

John Mary

我该怎么做?

我到目前为止所尝试的是搜索互联网和SO搜索问题所有我能找到的解决方案涉及Excel内置的重复删除或涉及countif的内容和更换""的重复项。我还查看了Excel函数列表,特别是那些来自" Text"类别,但无法找到任何有趣的东西,可以在一个单元格上完成。

8 个答案:

答案 0 :(得分:2)

答案在这里: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包含重复的文本,由 您可以更改分隔符

答案 1 :(得分:0)

正如我所写,用VBA解决这个问题很简单。如果您不能使用VBA,一种方法是使用辅助列。

假设:您的字符串在A1

输入以下公式:

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,"")

选择C1和D1然后填写,直到你开始得到空白

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

选择E2并填写。

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

如果您想要一个自动返回E列范围内最后一个单元格内容的单元格,您可以使用如下公式:

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

假设您在单元格中永远不会有两个以上不同的名称,这应该有效:

=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为空,则不会显示任何内容。

答案 4 :(得分:0)

找到了一种解决方案,如果您也是列出该列表的人,可能会起作用。

如果要通过将上面的单元格与当前行合并来创建列表,则可以使用以下代码检查值是否已经在上面的单元格中:

if(iserror(find(value_to_be_added,previous_concatenation)),
    previous_concatenation&" "&value_to_be_added,previous_concatenation)

答案 5 :(得分:0)

我在此线程https://superuser.com/questions/643909/remove-duplicate-entries-in-one-cell

中找到了答案

=join(" ",unique(transpose(split(A1," "))))

答案 6 :(得分:0)

您尝试过textjoin功能吗? (在Excel 2016中可用,不确定以前的版本)。我只是在寻找类似的东西,这似乎对我来说很有效,因为我在一个列中有多个不止一个的值。

=TEXTJOIN(delimiter;ignore_empty;text)
  • 以任何需要的方式定义定界符
  • 忽略空值可以为真,也可以为假,具体取决于您的需求
  • 文本将是您的值数组-使用此处的唯一函数(请参见下面的示例)将过滤掉任何字符串的任何倍数(我将其用于数字,并且可以使用)

示例:

=TEXTJOIN(" ";TRUE;UNIQUE($A$1:$A$16))

猜猜这可能等同于Excel与谷歌表格的连接功能。如果您输入= join,则会出现Textjoin-我采用了上面user11308575帖子中提供的公式,但是删除了括号和其内容,然后从那里删除了。

希望这会有所帮助(即使线程已经很旧);)

答案 7 :(得分:0)

如果一个人可以访问TEXTJOIN,则可以使用:

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