149:2つのエクセルシートからキーワード検索してその情報を貼り付ける

100:エクセル

キーが合致していれば、VLOOKUP関数が使えますが、びったりキーが合わなくて、キーワードで検索してその内容を別のシートから情報を持ってくるというシチュエーションがあると思います。そのマクロの説明です。

設定条件

全体の得意先の情報が、”得意先テーブル.xlsx”というファイルにあるとします。

今回、”魚屋住所.xlsx”という魚屋だけのファイルが今回入手できました。ところが、得意先テーブル.xlsxには、有限会社みかわ屋とか、正式名称の記載がありますが、今回、入手した魚屋住所.xlsxは、みかわ屋という名称だけで、VLOOKUP関数が使えない状況です。

得意先テーブル.xlsxには、郵便番号、県名、住所のフィールドがありますが、歯抜けとなっており、今回、魚屋住所.xlsxに郵便番号、県名、住所のフィールドが正しいものが入手できたので、得意先テーブル.xlsxの内容を最新のデータに置き換えたいというように考えました。

行数は、得意先テーブル.xlsxが10,000行に対して、魚屋住所.xlsxが300行というようなイメージです。

シートイメージ

”得意先テーブル.xlsx”

”魚屋住所.xlsx”

”魚屋住所.xlsx”のデータを”得意先テーブル.xlsx”に入れたい。

マクロ内容

まず、”魚屋住所.xlsx”から、ひとつのデータを、”得意先テーブル.xlsx”に移動するマクロを作りましょう。

ここで、マクロ名は、得意先テーブルへ() としました。

On Error GoTo エラーの処理 →  Exit Sub エラーの処理: は、エラーの時には、MsgBox “見つかりません” を表示するとしました。

次の入力セル行は、今アクティブである(選択しているセル)の行数を調べております。ActiveCell.Row

つまり、今選択しているセルで検索したいということです。

行数がわかれば、”魚屋住所.xlsx”から検索したい文字列は、A行にあるので、変数の検索文字は、Cells(入力セル行, 1) でマクロに覚えてもらいます。

ついでに、郵便番号、県、市は、同じセル行のB列(2)、C列(3)、D列(4)にあるので、それぞれ、変数として覚えてもらいます。

”魚屋住所.xlsx”のデータをマクロに覚えてもらったら、”得意先テーブル.xlsx”に切り替えて、検索します。

検索は、Cells.find(なんちゃら ですが、「What:=検索文字」としております。 ここで、変数名を検索文字以外の変数にした場合には、ここを変更してください。

検索がヒットすると、検索されたセルがアクティブセルとなるので、ひとつ右にアクティブセルを移動  ActiveCell.Offset(0, 1).Range(“A1”).Select

して マクロに覚えてもらった郵便番号を入力します。今あるセルに入力するのは、 ActiveCell.FormulaR1C1 = 郵便番号 と記載します。

もうひとつ右にアクティブセルを移動 して、県、同様に市を入力します。

最後に、”魚屋住所.xlsx”に戻って、ひとつ下の行に移動しておいて、次の検索ができる準備を行います。 ActiveCell.Offset(1, 0).Range(“A1”).Select

Sub 得意先テーブルへ()
On Error GoTo エラーの処理
    入力セル行 = ActiveCell.Row
    検索文字 = Cells(入力セル行, 1)
    郵便番号 = Cells(入力セル行, 2)
    県 = Cells(入力セル行, 3)
    市 = Cells(入力セル行, 4)
    
    Windows("得意先テーブル.xlsx").Activate

Cells.Find(What:=検索文字, After:=ActiveCell, LookIn:=xlFormulas, LookAt _
 :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
 False, MatchByte:=False, SearchFormat:=False).Activate
        
    ActiveCell.Offset(0, 1).Range("A1").Select
    ActiveCell.FormulaR1C1 = 郵便番号
    ActiveCell.Offset(0, 1).Range("A1").Select
    ActiveCell.FormulaR1C1 = 県
    ActiveCell.Offset(0, 1).Range("A1").Select
    ActiveCell.FormulaR1C1 = 市

    Windows("魚屋住所.xlsx").Activate
    ActiveCell.Offset(1, 0).Range("A1").Select
 Exit Sub
エラーの処理:
MsgBox "見つかりません"
End Sub

繰り返し設定

上記一つの検索が成功すれば、そのマクロを繰り返して一気に処理してしまいましょう。

注意)マクロの変な動きが起きたときのために、一気にマクロを動かす場合には、必ず、ファイルを保存しておいてください。そのひと手間が人生を助けます。

ここでは、main() というマクロ名にしました。

内容は、Do While – Loop で回数を10回の場合としました。回数を変更したい場合には、Do While i < 10 の10を変更してください。

Sub main()
 i = 0
 Do While i < 10
  i = i + 1
  得意先テーブルへ
 Loop
End Sub

コメント

タイトルとURLをコピーしました