【问题标题】:Remove duplicates from combined data in one cell从一个单元格中的组合数据中删除重复项
【发布时间】:2018-06-18 07:03:07
【问题描述】:

我希望删除一个单元格中的重复项,其中数据是从 2 个单元格组合的。例如:

单元格 1:ABC 和 DEF
单元格 2:ABC、DEF 和 LMN

我希望将单元格 1 和 2 的数据合并,这将同时删除重复项,并且在单元格 3 中显示为:ABC、DEF 和 LMN。

感谢是否有人可以帮助我。提前谢谢你。

***更正-如果我没有很好地输入详细信息,请见谅。数据实际上是名称,例如:

单元 1:John Mayer 和 Britney Spears 单元 2:约翰·迈耶、布兰妮·斯皮尔斯和赛琳娜·戈麦斯

我想要的第三单元的结果:约翰·梅耶、布兰妮·斯皮尔斯和赛琳娜·戈麦斯

意思是单词之间有空格。逗号和 & 号也很重要。*

【问题讨论】:

  • 如果有人能用一个公式做到这一点,我会感到惊讶......我会密切关注这一点,看看结果。
  • @Scott Craner 在哪里?他放假了吗?不过,我将概述一个公式解决方案。
  • 是否包含& 符号作为ABC & DEF 不是ABC, DEF 的重复项?
  • 抱歉,@Darren Bartrup-Cook 我不太明白你想问什么。
  • 抱歉 - 来晚了,我没有正确阅读问题。我在想你的意思是ABC & DEF 的整个字符串,而不是ABCDEF,如果这有意义的话。

标签: excel excel-formula


【解决方案1】:

也许在公式出现之前这会有所帮助。复制粘贴到模块中:

Public Function GetString(STR1 As String, STR2 As String) As String

Dim ARR1() As String, ARR2() As String, ARR3() As String
Dim X As Long, Y As Long, POS As Long

STR1 = Replace(STR1, " & ", ",")
STR1 = Replace(STR1, ", ", ",")
STR2 = Replace(STR2, " & ", ",")
STR2 = Replace(STR2, ", ", ",")

ARR1() = Split(STR1, ",")
ARR2() = Split(STR2, ",")

Y = 0
For X = LBound(ARR1) To UBound(ARR1)
    ReDim Preserve ARR3(Y)
    ARR3(Y) = ARR1(X)
    Y = Y + 1
Next X

For X = LBound(ARR2) To UBound(ARR2)
    ReDim Preserve ARR3(Y)
    ARR3(Y) = ARR2(X)
    Y = Y + 1
Next X

For X = LBound(ARR3) To UBound(ARR3)
    POS = InStr(GetString, ARR3(X))
    If POS <> 0 Then
        If Mid(GetString, POS + Len(ARR3(X)), 1) <> "," Then
            GetString = GetString & ARR3(X) & ", "
        End If
    Else
        GetString = GetString & ARR3(X) & ", "
    End If
Next X

GetString = Left(GetString, Len(GetString) - 2)
GetString = StrReverse(Replace(StrReverse(GetString), StrReverse(","), StrReverse(" &"), , 1))

End Function

这样称呼:

=GetString(Cell1, Cell2)

结果:

【讨论】:

  • 感谢@JvdV 的帮助,虽然效果不太好,但我会尝试修改。
  • 哪部分不起作用?如果您能提供更多关于哪些部分错误为您提供的信息,我会尽力帮助您。你用的是什么分隔符?在这个例子中,我使用了“,”和“&”。
  • 当前单元格 1 包含:John Mayer & Britney Spears |单元 2:约翰·迈耶、布兰妮·斯皮尔斯和赛琳娜·戈麦斯。第 3 单元的结果是 JohnMayer、BritneySpears、SelenaGomez,但我希望在第 3 单元中得到结果:John Mayer、Britney Spears 和 Selena Gomez
  • @ChingLu Tay,已修复! :)
  • 感谢您的修改,但我收到了 John Mayer、Britney Spears、Selena Gomez 的信息 - 没有显示 & 符号,并且姓氏出现在逗号旁边。
【解决方案2】:

试试这个公式:

 =A1&(SUBSTITUTE(A2,A1,""))

【讨论】:

  • 感谢@Pawel Czyz 的帮助,但这不是我想要的。
【解决方案3】:

通过公式是可行的。基本方法是:

  • 使用来自here 的标准拆分公式,但经过修改后生成字符串数组。

  • 将数组与自身匹配。如果第一个匹配在当前元素之前,那么它是一个重复的字符串,必须被忽略。

  • 使用 textjoin 连接其余元素。

  • 整理并想办法用 & 符号替换最后的逗号。

首先将其放在一个包含(例如)ABC 和 DEF 的单个单元格中

=TEXTJOIN(",",true,IF(MATCH(
TRIM(MID(SUBSTITUTE(A1,"&",REPT(" ",LEN(A1))),(ROW(Z1:INDEX(Z:Z,LEN(A1)-LEN(SUBSTITUTE(A1,"&",""))+1))-1)*LEN(A1)+1,LEN(A1))),
TRIM(MID(SUBSTITUTE(A1,"&",REPT(" ",LEN(A1))),(ROW(Z1:INDEX(Z:Z,LEN(A1)-LEN(SUBSTITUTE(A1,"&",""))+1))-1)*LEN(A1)+1,LEN(A1))),
0)
<ROW(Z1:INDEX(Z:Z,LEN(A1)-LEN(SUBSTITUTE(A1,"&",""))+1)),"",
TRIM(MID(SUBSTITUTE(A1,"&",REPT(" ",LEN(A1))),(ROW(Z1:INDEX(Z:Z,LEN(A1)-LEN(SUBSTITUTE(A1,"&",""))+1))-1)*LEN(A1)+1,LEN(A1)))))

但是因为有两个单元格,分隔符可以是“,”或“&”,所以每个A1都会变成

substitute(A1&","&A2,"&",",")

要将最后的“,”作为“&”,需要执行以下操作:

=substitute (*entire formula*,",","&",len(*entire formula*)-len(substitute(*entire formula*,",","")))

因此,唯一明智的做法是使用几个辅助单元-

在B1:

=SUBSTITUTE(A1&" , "&A2,"&",",")

在 C1 中:

=TEXTJOIN(" , ",true,IF(MATCH(
TRIM(MID(SUBSTITUTE(B1,",",REPT(" ",LEN(B1))),(ROW($Z1:INDEX($Z:$Z,LEN(B1)-LEN(SUBSTITUTE(B1,",",""))+1))-1)*LEN(B1)+1,LEN(B1))),
TRIM(MID(SUBSTITUTE(B1,",",REPT(" ",LEN(B1))),(ROW($Z1:INDEX($Z:$Z,LEN(B1)-LEN(SUBSTITUTE(B1,",",""))+1))-1)*LEN(B1)+1,LEN(B1))),
0)
<ROW($Z1:INDEX($Z:$Z,LEN(B1)-LEN(SUBSTITUTE(B1,",",""))+1)),"",
TRIM(MID(SUBSTITUTE(B1,",",REPT(" ",LEN(B1))),(ROW($Z1:INDEX($Z:$Z,LEN(B1)-LEN(SUBSTITUTE(B1,",",""))+1))-1)*LEN(B1)+1,LEN(B1)))))

在第一天:

=substitute(C1,",","&",len(C1)-len(substitute(C1,",","")))

最后我不得不在 Google 表格中测试它,因为我的 Excel 版本中没有 textjoin

这是它在 Excel 2016 中的外观

不用说C1中的公式必须使用CtrlShiftEnter

作为数组公式输入

【讨论】:

  • 感谢@Tom Sharpe,但我不太明白如何使用您提供的公式。我是否将 textjoin 公式插入到整个公式
  • 我认为更实用,因为使用辅助单元格的公式很长。将其添加到我的答案中。
  • 公式很长,但确实很神奇。谢谢@Tom Sharpe
猜你喜欢
  • 1970-01-01
  • 2015-03-11
  • 1970-01-01
  • 2020-11-07
  • 1970-01-01
  • 1970-01-01
  • 2019-06-11
  • 1970-01-01
  • 2019-03-29
相关资源
最近更新 更多