2017-09-24 15 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

您是否将公式向下拖动,或者是否将公式分别粘贴到每个单元格中? –

相关问题