
答え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
以下にサンプル出力を示します。
ご覧のとおり、入力は列で表されていると仮定しますあそしてB出力は隣の列に表示されます。コードでは、データがソートされているかどうかは考慮されません。
答え2
私はこれを時々行いますが、VBA は使わず、数ステップで行います。
1) まずデータをIDで並べ替えてグループ化します
2) 次に、C2 で: =if(A1=A2,if(A2=A3,B1&","&B2, "Last,"&B1&","&B2),B2)
3) それを実行する
4) C列をコピーして値として貼り付け(D列に貼り付けるとしましょう)、数式を削除します。
5) D列で並べ替え、「最後」と書かれていないものをすべて削除します。
6) D列を選択し、データタブ > テキストを列に > 区切り > カンマを選択 > OK
これですべてが一意の列に分割され、IDと同じ行に表示されます。B列とC列は不要になったため削除できます。