キーが一致するデータを抽出して別のシートに作成するには?

Question 77.1   Previous Next
お世話になっています。クリスマスイブの夜にもかかわらず失礼ながら質問させていただきたいのですが・・・

右図のように Sheet1 に表があり、

Sheet2 に複数の摘出したいデータ(番号)がならんでいます。
そこで、Sheet3 に Sheet2 で明記されている複数の数字に適合するデータのみ Sheet1 から抽出して Sheet3 に並べたいのですが、
なにか方法はありませんでしょうか?
Answer   Copyright (C) 2005.12.25 永井善王
いいですよ、孫たちへのクリスマスプレゼントは早めに済ませておきましたから。

ご質問の表は、データが列(右)方向に並んでいる珍しいレイアウトですね。 データが行(下)方向に並んでいれば色々な方法がありますが、ご自分でどこまで考えられたのかが不明ですし、比較的わかりやすい For...Next文で繰り返し処理する方法で回答します。
下記にマクロと処理の流れをお示ししますから、対比しながら根気よく理解してください。
なお、マクロをステップ実行するか、64行目のあたりにブレークポイントを設けて実行してみて理解する方法が、手っ取り早いかも知れません。
Sub キーが一致するデータを抽出して別のシートに作成する()
10  番号右端 = Worksheets("Sheet2").Cells(1, Columns.Count).End(xlToLeft).Column
20  表右端 = Worksheets("Sheet1").Cells(1, Columns.Count).End(xlToLeft).Column
30  答列 = 1
40  For 番号列 = 1 To 番号右端
41      番号 = Worksheets("Sheet2").Cells(1, 番号列).Value
50      For 表列 = 1 To 表右端
51          表の値 = Worksheets("Sheet1").Cells(1, 表列).Value
60          If 番号 = 表の値 Then
61              名前 = Worksheets("Sheet1").Cells(2, 表列).Value
62              Worksheets("Sheet3").Cells(1, 答列).Value = 名前
63              答列 = 答列 + 1
64          End If
70      Next
80  Next
End Sub
処理の流れ
10. Sheet2に入っているデータの右端の列番号を取得して変数「番号右端」に代入する
20. Sheet1        〃           〃         「表右端」   〃
30. 答をセットするための列番号の初期値として、変数「答列」に 1 を代入する

40. 指定した回数だけ以下の一連のステートメント(注1)を繰り返し実行する
(注1)80行目のNextステートメントまで
・カウンタとして変数「番号列」を使い、     ・その初期値は 1、
・(1回繰り返すごとにカウンタの値に 1加えて )、・カウンタの値が変数「番号右端」の値になるまで
41. Sheet2のセル (1行目の変数「番号列」の値の列) の値を変数「番号」に代入する

50. 指定した回数だけ以下の一連のステートメント(注2)を繰り返し実行する
(注2)70行目のNextステートメントまで
・カウンタとして変数「表列」を使い、      ・その初期値は 1、
・(1回繰り返すごとにカウンタの値に 1加えて )、・カウンタの値が変数「表右端」の値になるまで
51. Sheet1のセル (1行目の変数「表列」の値の列) の値を変数「表の値」に代入する

60. もし変数「番号」の値と、変数「表列」の値が等しい場合は、以下の一連のステートメント(注3)を実行する
(注3)64行目の End Ifステートメントまで
61. Sheet1のセル (2行目の変数「表列」の値の列) の値を変数「名前」に代入する
62. 変数「名前」の値をSheet3のセル (1行目の変数「答列」の値の列)に代入する
63. 変数「答列」の値に 1 加える

 

Excel VBA Macro