水平テーブルレイアウトを垂直テーブルに変換する

水平テーブルレイアウトを垂直テーブルに変換する

次のExcelシートを並べ替える必要があります

から

ID  Name1  Name2  Name3

1   Alf    Bert   Fritz

2   Curt

3   Otto   Mike

4   Sue    Zack 

ID  Name

1   Alf

1   Bert

1   Fritz

2   Curt

3   Otto

3   Mike

4   Sue

4   Zack

適切な検索用語が見つかりません。よくあることだと思いますが、適切に説明できません。

答え1

このコードを試してください。ステップごとに動作するため、説明は不要です。入力データは A1 から始まり、出力は A8 から始まります。これは変更できます。

もちろんもっと短いコードも可能ですし、配列数式を組むこともできると思います。

Sub single_col()
    Dim icell As Integer
    Dim irow As Integer, icol As Integer
    Dim nrows As Integer, ncols As Integer
    Dim rng_all As Range, rng_curr As Range, rng_trg As Range
    Set rng_all = Range("A2:D5")
    Set rng_trg = Range("A8")
    nrows = rng_all.Rows.Count
    icell = 0
    For irow = 1 To nrows
      Set rng_curr = rng_all.Rows(irow)
      ncols = WorksheetFunction.CountA(rng_curr)
      For icol = 2 To ncols
        icell = icell + 1
        Dim name As String
        name = rng_curr.Cells(1, icol).Text
        rng_trg.Value = rng_curr.Cells(1, 1).Text
        rng_trg.Offset(0, 1).Value = name
        Set rng_trg = rng_trg.Offset(1, 0)
      Next icol
    Next irow
End Sub

PS: 上記のコードには、コメントで提案された変更がすでに含まれています。

答え2

ピボットテーブルレイアウトを「ピボット解除」したいとします。記事Jon Walkenbach によるこのチュートリアルでは、VBA コードを必要とせず、キーを数回押すだけで何ができるかを説明します。

あなたの特定の状況では、私は次のようにします。

1. Alt + D、P を使用して「古い」ピボット テーブル メニューを開きます。以下に示すようなダイアログ ボックスが表示されます。「複数の統合範囲」オプションを選択し、「次へ」をクリックします。

ここに画像の説明を入力してください

2.次のステップで「ページ フィールドを作成します」を選択し、「次へ」をクリックします。

ここに画像の説明を入力してください

3. ダイアログ ボックスの上部で定義されるようにセル範囲を強調表示し、[追加] ボタンをクリックしてその範囲を [すべての範囲] リストにコピーします。[次へ] をクリックします。

ここに画像の説明を入力してください

4. データから離れたセルを選択します。ここでは、同じシートの F3 を選択しました。(必要に応じて別のシートを選択することもできます。) [完了] をクリックします。

ここに画像の説明を入力してください

5. 次のようなピボット テーブルが表示されます。ダイアログ ボックスで、[行] および [列] のチェック ボックスをオフにします。

ここに画像の説明を入力してください

6.これで 1 つのセルのピボット テーブルが作成されます。

ここに画像の説明を入力してください

7. 次に、1 つのセルをダブルクリックすると、新しいシートに、ピボットされていないデータが新しいテーブルとして表示されます。

ここに画像の説明を入力してください

この表データを使用すると、列 C をフィルタリングして空白以外の値を表示し、列 B を削除すると、希望するレイアウトが得られます。

関連情報