Excel将多列与:和; 在每个值对之间

这样的excel公式

=$C$1&":"&C2&";"&$D$1&":"&D2&";"&$E$1&E2 

结果

 US:2.27;AU:2.05;BR2.95 

我想从列C到W做一个长的公式。我如何加快编写公式或使用VBA?

  CDEF 1 US AU BR combined_countryshipping 2 2.27 2.05 2.95 US:2.27;AU:2.05;BR2.95 

例如这只有3个国家。 我有40-50个国家来合并。

你可以试试这个…

 Function CustomConcatenate(ByVal Rng As Range) As String Dim cell As Range Dim str As String For Each cell In Rng If cell.Row = Rng.Cells(1).Row Then If str = "" Then str = cell & ":" & cell.Offset(1, 0) Else str = str & ";" & cell & ":" & cell.Offset(1, 0) End If End If Next cell CustomConcatenate = str End Function 

然后在这张纸上试试

 =CustomConcatenate(C1:W2) 

如果您有Office 365 Excel,则可以在数组公式中使用TEXTJOIN:

把它放在F2中:

 =TEXTJOIN(";",TRUE,$C$1:$E$1&":"&C2:E2) 

作为一个数组公式,在退出编辑模式时,需要使用Ctrl-Shift-Enter而不是Enter来确认。 如果正确完成,则Excel将在公式周围放置{}

放入F2。 按Ctrl-Shift-Enter然后复制/拖动长度。

在这里输入图像说明


如果您的值有时有空格,并且在输出时想跳过输出中的国家,请使用以下数组公式:

 =TEXTJOIN(";",TRUE,IF(C2:E2<>"",$C$1:$E$1&":"&C2:E2,"")) 

这将跳过任何空白值的国家。


如果你没有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