キーの一致するデータを1行にまとめる
 A列をキーとして同じ情報が入力されている行のデータを、
同じ情報を持つ一番上の行の右側に挿入(移動)して
1行のデータにまとめます。
 例えば以下のようなデータがあるとします。データは2列です。

    | A    B      C
  --+---------------------
  1 | 1F   高橋   鈴木
  2 | 1F   佐藤   杉山
  3 | 2F   ....   ....
  4 | 3F   ....   ....
  : |

 次のような結果を求めます。

    | A    B     C     D     E ...
  --+----------------------------------
  1 | 1F   高橋  佐藤  鈴木  杉山
  3 | 2F   ....   ....
  4 | 3F   ....   ....
  : |

 「高橋、鈴木、佐藤、杉山」ではなく、「高橋、佐藤、鈴木、杉山」
となることに注目してください。
 サンプルは、A列のキーがソートされていることを前提条件
としています。

Sub Sample()

    Dim strKey As String        '検索キー
    Dim nRow   As Long          '行
    Dim nCol   As Long          '列

    '基準点をアクティブ
    Range("A1").Activate

    'アクティブセルが空になるまで繰り返す
    Do Until ActiveCell.Value = ""

        'セルの値を取得(検索キー)
        strKey = ActiveCell.Value

        'セルの行を取得
        nRow = ActiveCell.Row

        'カラム位置の初期化
        nCol = 0

        '一列目の値が同一ならカット&ペーストを行う
        Do Until strKey <> Cells(nRow + 1, 1).Value

            'カラム位置をインクリメント
            nCol = nCol + 1

            'セルを選択
            Cells(nRow + 1, 2).Select

            '選択セルを切り取る
            Selection.Cut

            'アクティブセルの最終列を選択
            Cells(nRow, 2 + nCol).Select

            '右側にシフトして挿入する
            Selection.Insert Shift:=xlToRight

            '2列目のデータを最終列に貼り付ける
            Cells(nRow, 1).End(xlToRight).Offset(, 1).Value = _
                                             Cells(nRow + 1, 3).Value

            'アクティブ行の直下の行を削除する
            ActiveCell.Offset(1).EntireRow.Delete

        Loop

        '次の行をアクティブ
        Cells(nRow + 1, 1).Activate

    Loop

End Sub


Excel97/2000



戻る


Excel Word Access VBA! モーグ