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