2011-03-04 94 views
0

我有一組行&列如下在列值的範圍的Excel VBA串連列1 2

 
Column1 Column2 
123  Value1 
456  Value1 
789  Value2 
101  Value2 
234  Value2 
567  Value3 
890  Value4 

I would like to concatenate column1 based on column2 range like: 

Column3 
123 
123,456 
789 
789,101 
789,101,234 
567 
890 

我嘗試這樣使用式和乾的,但有一種更好的方式(如在宏)來做到這一點?

= IF(B2 = B1,C1 & 「」 & C2,C2)

並挑選爲每個值

+0

是什麼樣的,你認爲的「好」的一個VBA解決方案?該公式似乎很簡單,容易,緊湊... – 2011-03-04 20:02:46

回答

0

井的最後一行,則該宏會做的。不過,我不一定會說這樣比較好。

Sub Macro1() 
    Dim Source As Range 
    Dim Control As Range 
    Dim Output As Range 
    Set Source = Range("A1") 
    Set Control = Range("B1") 
    Set Output = Range("C1") 
    Dim StoreHere As String 
    Dim Row As Integer 
    Dim AddItOn As Boolean 

    Row = 1 
    StoreHere = "" 

    While (Not (IsEmpty(Source.Cells(Row, 1)))) 
     If (Row > 1) Then 
      If (Control.Cells(Row, 1) = Control.Cells(Row - 1, 1)) Then 
       AddItOn = True 
      Else 
       AddItOn = False 
      End If 
     Else 
      AddItOn = False 
     End If 

     If (AddItOn = True) Then 
      StoreHere = StoreHere & "," & Source.Cells(Row, 1) 
     Else 
      StoreHere = Source.Cells(Row, 1) 
     End If 

     Output.Cells(Row, 1).NumberFormat = "@" 
     Output.Cells(Row, 1) = StoreHere 
     Row = Row + 1 
    Wend 
End Sub 
+0

哇!它像一個魅力工作,感謝這一點。 – Ara 2011-03-04 14:15:52

0

這裏有一個小選項

Sub Macro1() 
    Dim cl As Range 

    Set cl = [A1] ' set to where your data starts 
    Do While cl <> "" 
     If cl.Cells(1, 2) = cl.Cells(0, 2) Then 
      cl.Cells(1, 3) = cl.Cells(0, 3) & "," & cl 
     Else 
      cl.Cells(1, 3) = CStr(cl) 
     End If 
     Set cl = cl.Cells(2, 1) 
    Loop 
End Sub