Excel:连接单元格并删除重复项

如何连接单元格B1:K1的值以接收A1的string。 空单元格应该被省略。 这可能使用Excel命令或仅与vba?

在这里输入图像说明

如果您有Office 365 Excel,则可以使用TEXTJOIN的数组forms:

 =TEXTJOIN(", ",TRUE,INDEX(1:1,,N(IF({1},MODE.MULT(IF((IFERROR(MATCH(B1:K1,B1:K1,0)=COLUMN(B1:K1)-MIN(COLUMN(B1:K1))+1,0))*(B1:K1<>""),COLUMN(B1:K1)*{1;1})))))) 

作为一个数组,当退出编辑模式时,需要使用Ctrl-Shift-Enter而不是Enter来确认。

在这里输入图像说明


如果您没有office 365 Excel,您将需要vba。 这个UDF将模仿TEXTJOIN。 将它放在工作簿中的一个模块中,并使用上述公式。

 Function TEXTJOIN(delim As String, skipblank As Boolean, arr) Dim d As Long Dim c As Long Dim arr2() Dim t As Long, y As Long t = -1 y = -1 If TypeName(arr) = "Range" Then arr2 = arr.Value Else arr2 = arr End If On Error Resume Next t = UBound(arr2, 2) y = UBound(arr2, 1) On Error GoTo 0 If t >= 0 And y >= 0 Then For c = LBound(arr2, 1) To UBound(arr2, 1) For d = LBound(arr2, 1) To UBound(arr2, 2) If arr2(c, d) <> "" Or Not skipblank Then TEXTJOIN = TEXTJOIN & arr2(c, d) & delim End If Next d Next c Else For c = LBound(arr2) To UBound(arr2) If arr2(c) <> "" Or Not skipblank Then TEXTJOIN = TEXTJOIN & arr2(c) & delim End If Next c End If TEXTJOIN = Left(TEXTJOIN, Len(TEXTJOIN) - Len(delim)) End Function