Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
删除Excel单元格中的重复项_Excel_Duplicates_Excel Formula_Cell_Duplicate Removal - Fatal编程技术网

删除Excel单元格中的重复项

删除Excel单元格中的重复项,excel,duplicates,excel-formula,cell,duplicate-removal,Excel,Duplicates,Excel Formula,Cell,Duplicate Removal,假设我在一个Excel单元格中有以下文本字符串: John John John Mary Mary 我想在另一个单元格上创建一个公式(请不要使用菜单函数或VBA) John Mary 我该怎么做 到目前为止,我所做的是搜索互联网,搜索有关该问题的信息,我所能找到的只是涉及Excel内置的删除重复项的解决方案,或者涉及到countif和替换的重复项的解决方案。我还查看了Excel函数列表,特别是那些来自“文本”类别的函数,但找不到任何有趣的、可以在一个单元格上完成的功能。正如我所写的,用VBA

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

John John John Mary Mary
我想在另一个单元格上创建一个公式(请不要使用菜单函数或VBA)

John Mary
我该怎么做


到目前为止,我所做的是搜索互联网,搜索有关该问题的信息,我所能找到的只是涉及Excel内置的删除重复项的解决方案,或者涉及到
countif
和替换
的重复项的解决方案。我还查看了Excel函数列表,特别是那些来自“文本”类别的函数,但找不到任何有趣的、可以在一个单元格上完成的功能。

正如我所写的,用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)

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

假设一个单元格中的不同名称不会超过两个,这应该可以:

=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

John John John Mary Mary
John Mary
John Mary John Mary
John Mary Mary
John John Mary
John
John John
John John John
如果
A1
为空,则不会显示任何内容。

答案如下:

函数RemoveDupes2(txt作为字符串,可选delim作为字符串=”)作为字符串
暗x
'Updateby20140924
使用CreateObject(“Scripting.Dictionary”)
.CompareMode=vbTextCompare
对于拆分中的每个x(txt、delim)
如果Trim(x)“,且不存在(Trim(x)),则添加Trim(x),无任何内容
下一个
如果.Count>0,则RemoveDupes2=Join(.keys,delim)
以
端函数
将上面的代码放入模块中

使用
=RemoveDupes2(A2,“,”)
A2包含由分隔的重复文本,
您可以更改分隔符

如果您也是列表中的一员,则找到一个可能有效的解决方案

当您通过将上面的单元格与当前行组合来创建列表时,可以使用以下代码检查该值是否已在上面的单元格中:

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

我在下面的帖子中找到了答案


=join(“),unique(转置(split(A1,”))

您是否尝试了textjoin函数?(在Excel 2016中提供,不确定以前的版本)。我只是在找一些类似的东西,这似乎可以帮我在一个专栏上完成这项工作,我不止一次地拥有多个值

=TEXTJOIN(delimiter;ignore_empty;text)
  • 以任何需要的方式定义分隔符
  • “忽略空”可以是真的,也可以是假的,这取决于满足您需求的内容
  • 文本将是您的值数组-使用此处的unique函数(参见下面的示例)将过滤掉任何字符串的任何倍数(我将其用于数字,它可以工作)
示例:

=TEXTJOIN(" ";TRUE;UNIQUE($A$1:$A$16))
我猜这可能是Excel相当于GoogleSheets的连接功能。如果你输入=join,就会出现Textjoin——我采用了上面user11308575帖子中提供的公式,但删除了偏执及其内容,然后从那里开始


希望这能有所帮助(即使线已经旧了);)

如果可以访问
TEXTJOIN
可以使用:

=TEXTJOIN(" ",,FILTERXML("<t><s>"&SUBSTITUTE(A1," ","</s><s>")&"</s></t>","//s[not(preceding::*=.)]"))
=TEXTJOIN(“,”FILTERXML(“&SUBSTITUTE(A1,“,”)&“//s[非(前面的:*=)]”)

您尝试过什么?你采取什么样的方法?这是一个用VBA解决的小问题;只是公式就不那么简单了。您可能可以使用帮助器列来完成此操作。@RonRosenfeld,我将用解决此问题的微不足道的尝试来更新Q。我理解只使用公式的必要性,但我可以问一下,为什么您不能在将宏附加到工作表上的形状或按钮的情况下使用VBA来完成此操作?我完全好奇。甚至是工作表中内置的事件。嗯?@PJRosenburg,我们的许多用户使用Calc而不是Excel;根据我的经验,Calc除了解释最简单的VBA宏外,在解释任何东西方面都做得不好。谢谢你的输入,但我真的需要它在没有用户干预的情况下工作。对于一个客户来说,这是一个复杂的电子表格,我不想让他做任何事情,只是填写单元格。谢谢,罗恩。这似乎不适合我的实际案例,但我会进一步考虑。@WaldirLeoncio它适用于您的示例数据。如果您的示例不具有代表性,请编辑原始问题,以提供有关失败的信息。这确实适用于两个不同的名称。我看看能不能把它推广到16个名字。谢谢对于3个名字来说,这种特殊的策略会变得非常棘手,在你得到16个名字之前,你可能会达到一些Excel限制。这基本上是一个递归算法:a)抓取第一个单词,B)从字符串的其余部分删除它,C)连接a和B,[对步骤B的结果重复步骤a-C,…]。您的问题突出了Excel字符串操作的弱点。(特别是不能使用正则表达式。)此外,Excel缺少类似于
eval
的函数,这使得在不使用VBA或“隐藏”的情况下很难实现这类功能单元格。@RickHitchcock有没有办法在不使用尾随逗号的情况下对最多3个唯一字符串执行此操作?不确定尾随逗号是什么意思,但我当然不建议对超过2个唯一字符串使用此策略。如果不使用VBA,Excel无法很好地处理这个问题。对于13个字符的数字,这对我来说不起作用。最初的答案是关于在Google Sheets中使用该函数。Microsoft Excel没有“连接”功能。理论是这样的,但你只是忽略了一点,OP在一个单元格中有一个字符串,他需要删除d