複数の列を 1 つに積み重ねるにはどうすればよいですか?

複数の列を 1 つに積み重ねるにはどうすればよいですか?

サンプルデータ

私はこれを実現するのに十分な VBA の経験がありません。以下の VBA を変更して、次の操作を実行できるようにするにはどうすればよいでしょうか。

  1. 積み重ねた列を新しいシートに配置します。

  2. 空白を処理します (現在、以下のコードがこれを実行します)

3. コードは、ユーザーが現在選択している範囲で実行されます。理想的には、ユーザーは連続していない列を選択できます。

Sub MoveAllDataToColumnA()
    Dim i As Long, ws As Worksheet, rngCopy As Range, rngEnd As Range
    Set ws = ActiveSheet
    Do Until ws.Cells(1, 2).Value = ""
        Set rngCopy = ws.Range("B2", ws.Cells(ws.Rows.Count, "B").End(xlUp))
        Set rngEnd = ws.Cells(ws.Rows.Count, "A").End(xlUp).Offset(1, 0)
        rngEnd.Resize(rngCopy.Rows.Count, 1).Value = rngCopy.Value
        rngCopy.EntireColumn.Delete
    Loop
End Sub

答え1

これには Power Query アドインを使用しますが、要件 #3 には対応できません。Excel 2016 以降、Power Query は [取得と変換] セクションの [データ] リボンに組み込まれています。

Power Query で作成する手順は次のようになります。

Org 列と Length 列を選択し、「列の削除」を選択します。

カテゴリ列を選択し、「列のピボット解除/その他の列のピボット解除」を選択します。

結果を新しい Excel テーブルに配信できます。

関連情報