質問: エクセルで以下の処理を行えるマクロを作成したいです。 当方、マクロについてほとんど知識がありません。 恐縮ですが、教えていただけると嬉しいです。 ・主にしたいこと [検索]ブックで一致するコードを探して、 [結果]ブックの対応するコードの行にそれぞれの項目を返したい。 ●ブック1 [検索] シートが12個あります(それぞれ、1、2、3...12というシート名=1~12月分) ↓各シートの内容 A B C D 1 氏名 数値 コード 内容 2 abc 111 SS1234 あいうえお 3 bcd 123 SS3456 かきくけこ ・ ・ ・ といった感じです。 12個のシートの中身はそれぞれ似たようなものですが、 「コード」や「内容」などは少しずつ違います。 ●ブック2 [結果] ↓シートの内容 A B C D 1 氏名 コード 内容 数値 2 SS3456 3 SS1234 ・ ・ ・ といった感じです。 (注)検索用ブックとは列の並びが異なっています。 ここでやりたいことの詳細ですが、 ・[結果]ブックの「コード」(B列)にコードを入力すると、 [検索]ブックで一致するコードを検索し、 A列「氏名」、C列「内容」、D列「数値」に、[検索]シートの内容を 自動的に表示させたい。 (ただし[結果]ブックに入力した「コード」は、[検索]ブックの1~12のうち、 どのシートにあるかわからない) ・入力したコードが見つからない場合は何も表示しない。 ということです。 最初VLOOKUP、MATCH等の関数で表示することを考えましたが、 シートが複数にまたがっているのと、 列の並び方が[検索][結果]ブックで違うのでわかりませんでした。 長くなってしまい申し訳ありませんが、どうかおしえてください。 よろしくお願いします。
回答: もっとよいコーディングがあろうかとも存じますが、一応、こんなところでできないことはなさそうですが。。。 「検索.xls」は予め開いてからお試しください。 「結果.xls」のシートモジュールに書きます。 Private Sub Worksheet_Change(ByVal Target As Range) Dim myRng As Range Dim myWS As Worksheet If Target.Column = 2 And Target.Count = 1 Then For Each myWS In Workbooks("検索.xls").Worksheets With myWS.Columns(3) Set myRng = .Find(What:=Target.Value, LookIn:=xlValues, _ LookAt:=xlWhole, MatchCase:=False, MatchByte:=False, SearchFormat:=False) End With If Not myRng Is Nothing Then Exit For End If Next Windows("結果.xls").Activate Application.EnableEvents = False If myRng Is Nothing Then With Target .Offset(, -1).Value = "" .Offset(, 1).Value = "" .Offset(, 2).Value = "" End With Else With Target .Offset(, -1).Value = myRng.Offset(, -2).Value .Offset(, 1).Value = myRng.Offset(, 1).Value .Offset(, 2).Value = myRng.Offset(, -1).Value End With End If Application.EnableEvents = True Target.Offset(1).Select End If End Sub