データを列に分割する

データを列に分割する

私は作業中のスプレッドシートを持っています。このシートには 2 つの列があります。列 A は一意の識別子で、列 B には ID 番号があります。1 つの識別子には最大 1 個または 5 個の ID を含めることができます。必要なのは、識別子を保持したまますべての ID を 1 行に移動することです。その際、前後の画像を添付します。

これを実行できる何らかの方法があるはずです。ご協力いただければ幸いです。

前に

前に

後

答え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列は不要になったため削除できます。

関連情報