2017-09-24 43 views
0

Excel公式是這樣Excel將多列與:和;每個值對之間

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

結果

US:2.27;AU:2.05;BR2.95 

我想做的事情,從C柱長公式W.如何加快寫公式或使用VBA?

 C  D  E    F 
1 US  AU  BR  combined_countryshipping 
2 2.27 2.05 2.95 US:2.27;AU:2.05;BR2.95 

這只是3個國家的例子。我有40-50個國家合併。

+0

你將建立一個循環,會重複UTIL你達到了一個條件。 For循環,或While循環會工作 –

+0

你有'TEXTJOIN()'?另外,爲什麼'突然'你做'E1&E2'?這是一個重複性的問題,還是會有一些需要的,並且沒有真正的模式來知道哪些是問題? – BruceWayne

+0

當它,我永遠不會建議該選項,因爲我從來沒有得到使用它與我的版本的Excel @BruceWayne –

回答

2

你可以試試這個...

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) 
+0

好的,你的代碼有效。謝謝。 – user3394010

+0

不客氣!很高興它的工作。 :) – sktneer

2

如果您有Office Excel的365,那麼你可以使用TEXTJOIN陣列式中:

在F2將這個:

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

作爲一個數組公式,在退出編輯模式時,需要使用Ctrl-Shift-Enter而不是Enter來確認。如果正確完成,Excel將在公式周圍放置{}

放入F2。按Ctrl-Shift-Enter然後複製/拖下長度。

enter image description here


如果你有時必須在空白的值,並想跳過這個國家在輸出時是空白使用這個數組公式:

=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 
在VBA
+0

嗨斯科特。我只是通過將它放入excel vba來嘗試你的代碼。它在第一行工作,但是當我拖下去的結果與第一行相同時。 F2中的行號相應改變,但結果與第一行相同。需要任何編輯? – user3394010

+0

= TEXTJOIN(「:」,TRUE,IF(C2:E2 <>「」,$ C $ 1:$ E $ 1&「:」&C2:E2,「」))這一個錯過了;在國家代碼之前。你能糾正它嗎?謝謝。 – user3394010

+0

您是否將公式向下拖動,或者是否將公式分別粘貼到每個單元格中? –

相關問題