Excel:在excel中联合列文本

我有两列,我试图把这两列中的文本联合起来,并将结果存储在第三列中。 在下面的示例数据中,Union是我试图实现的输出。 当我连接col1和col2数据时,结果中有重复。 有没有办法摆脱使用电力查询在Excel中的重复? 或者我应该写一个C#程序,并使用联合运算符来获得我正在寻找的结果集。 谢谢

Col1 Col2 Union ab a ab a+ ab ab+ aaaa ab ab 

转到VBA [1],右键单击您的VBAProject>插入>模块。 input这个函数[2]。 然后在您的工作表的第3 =RemoveDupes(A1 & B1)键入公式=RemoveDupes(A1 & B1)

 Public Function RemoveDupes(str As String) As String Dim i As Long Dim objDict As Object Set objDict = CreateObject("Scripting.Dictionary") For i = 1 To Len(str) If objDict.exists(Mid(str, i, 1)) Then 'do nothing Else objDict.Add Mid(str, i, 1), i RemoveDupes = RemoveDupes & Mid(str, i, 1) End If Next i objDict.RemoveAll Set objDict = Nothing End Function 

如果你想卷起自己的啰嗦,你可以这样做:

  • 创build一个数组并将你的string分割为两个字符 (基本上,你将有两个数组填充字符)
  • 创build一个新的数组
  • 读取第一个数组的每个字符,并只在新数组中不存在的情况下插入到新数组中
  • 第二个数组中读取每个字符,并只在新数组中不存在的情况下插入到新数组中
  • 将每个字符join一个string并输出

[1] 如何在Excel 2010中打开Excel VBA编辑器

[2] 在专家交换回答,而不是滚动我自己的这个答案。 学分dlmille

我只是给我的解决scheme,因为我想看看我会怎么做。

在VBA中,使用以下function:

 Function Union(cl1 As String, cl2 As String) As String Dim i As Integer Dim chr As String Dim PlusIncluded As Boolean PlusIncluded = False For i = 1 To Len(cl1) chr = Mid(cl1, i, 1) If chr = "+" Then PlusIncluded = True cl1 = Replace(cl1, chr, "") End If cl2 = Replace(cl2, chr, "") Next i Union = cl1 & cl2 If PlusIncluded Then Union = Union & "+" End Function 

然后你可以在你的excel表单中find它 – 沿着=Union(A1,B1)

基本上,解释function – 它采取2细胞数据,然后:

  • 循环遍历第一个单元格中的所有字符
  • 如果是加号,则将其从第一个单元格中移除,并设置一个标志来知道我们遇到了一个
  • 它从第二个单元格的数据中删除该字符
  • 然后,如果标志设置为true,那么只需将第二个单元格的剩余内容添加到第一个单元格中,并将其加上一个加号

希望这可以帮助!