次の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 を削除すると、希望するレイアウトが得られます。