
答案1
將此宏放入標準模組中並運行它:
Sub Macro1()
Dim i As Long, j As Long, k As Long, Na As Long
Dim v As String, Nc As Long
Columns("A:A").Copy Columns("C:C")
ActiveSheet.Range("C:C").RemoveDuplicates Columns:=1, Header:=xlYes
Na = Cells(Rows.Count, "A").End(xlUp).Row
Nc = Cells(Rows.Count, "C").End(xlUp).Row
For i = 2 To Nc
k = 4
v = Cells(i, "C").Value
For j = 2 To Na
If v = Cells(j, 1).Value Then
Cells(i, k) = Cells(j, 2).Value
k = k + 1
End If
Next j
Next i
End Sub
這是一些範例輸出:
如您所見,我們假設輸入位於列中A和乙。輸出位於它們旁邊的列。程式碼不關心資料是否排序。
答案2
我經常這樣做,但不需要 VBA,只需幾個步驟:
1)首先按ID將資料排序,以便將它們分組在一起
2) 然後,在 C2 中: =if(A1=A2,if(A2=A3,B1&","&B2, "最後,"&B1&","&B2),B2)
3)運行它
4)複製並貼上C列作為值(假設在D列中)以擺脫公式
5)依D列排序,刪除所有沒有說「最後」的內容
6)選擇D列,資料標籤>文字到列>分隔>選擇逗號>確定
現在,所有內容都被分解為唯一的列,並且與 ID 位於同一行。您可以刪除 B 和 C 列,因為不再需要它們