• ベストアンサー

エクセルマクロで住所を比較しコードを代入したい

エクセル2003を使っています。 シート1に  A列にコード  B列に都道府県名  C列に市区町村名 の表があります。 シート2は  B列に住所 が入っています。 このシート2の住所とシート1の都道府県名と市区町村名をマッチングさせて シート1のコードをシート2のC列に代入したいのですが マクロを使ってやりたいのですがどうしたらよいでしょうか? よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.4

No.1です! >この場合代入される側のSet ws2 = Worksheets("sheet2")の シート名を指定しなくてもいい方法はありませんか シート名が固定ではないので開いているシートで動作するように したいのですが とありましたので・・・ 参照先のBookは開いた後のコードになります。 参照先のBook名は仮に「book2」とします。 そしてws2を設定しなくてもいいように、画面左下にある操作したいSheet(今回はSheet2とします)のSheet見出し上で右クリック → コードの表示 → VBE画面が出ますので、 訂正した↓のコードをコピー&ペーストしてマクロを実行してみてください。 Sub test() 'この行から Dim i, j As Long Dim wb As Workbook Dim ws1 As Worksheet Set wb = Workbooks("book2") '←「book2」の部分はBook名を! Set ws1 = wb.Worksheets("sheet1") '←「sheet1」はbook2の参照先Sheet名を! For i = 2 To ws1.Cells(Rows.Count, 1).End(xlUp).Row For j = 2 To Cells(Rows.Count, 1).End(xlUp).Row If Cells(j, 2) Like ws1.Cells(i, 2) & ws1.Cells(i, 3) & "*" Then Cells(j, 3) = ws1.Cells(i, 1) End If Next j Next i End Sub 'この行まで こんな感じではどうでしょうか?m(__)m

bigin888
質問者

お礼

ありがとうございます、本当に助かりました。

その他の回答 (3)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

質問には実例を挙げて質問すべきだ。 何が難しいのかわかって質問しているのか。 シート2の住所と シート1のB列に都道府県名+ C列に市区町村名は、同じ体系なのか。何も書かないで質問になら無い。 住所と言えば、普通は丁目番地まで連想するが、データはどうなんですか。 外に住所で都道府県が省かれているものも散在するとかも面倒になる 含まれる形である場合は、シート1を検索するのは、それなりに難しくなる。 住所が東京都調布市までになっているなら、VBAでもVLOOKUP関数を使って、関数と同じように出来る。 丁目番地つきの場合は、丁目番地をはずす(除く)ことは何か特別の形式(数字とハイフンに限るとか)が無いと分離が難しい。

  • rukuku
  • ベストアンサー率42% (401/933)
回答No.2

こんばんは 原始的な方法です。 準備として、シート1のD2に =B2&C2 以下、シート1のデータがある行だけオートフィルします。 (1行目はタイトル行であると想定しています) また、シート2のB列のデータに余計なスペースが含まれている場合には前もって取り除いておいてください。 Like演算子を使うと特定の文字列が含まれるか判定できます。 Sub 住所コード()  Dim DataLastLine As Long 'シート1の最終行  Dim ResultLastLine As Long 'シート2の最終行  Dim DataLine As Long 'シート1の各行  Dim ResultLine As Long 'シート2の各行  ThisWorkbook.Activate  DataLastLine = Worksheets("シート1").[A65536].End(xlUp).Row  ResultLastLine = Worksheets("シート2").[B65536].End(xlUp).Row    For DataLine = 2 To DataLastLine   For ResultLine = 2 To ResultLastLine    If Worksheets("シート2").Cells(ResultLine, "B") Like "*" & Worksheets("シート1").Cells(DataLine, "D") & "*" Then _     Worksheets("シート2").Cells(ResultLine, "C") = Cells(DataLine, "A")   Next ResultLine  Next DataLine End Sub

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.1

こんばんは! 外していたらごめんなさい。 関数でもできそうな感じですが、VBAをご希望のようなので・・・ 一例です。 ↓の画像のような感じでSheet1には都道府県・市区町村名のみで Sheet2のB列には都道府県からの正確な住所が入っているものとします。 ↓のコードを標準モジュールにコピー&ペーストしてマクロを実行してみてください。 Sub test() 'この行から Dim i, j As Long Dim ws1, ws2 As Worksheet Set ws1 = Worksheets("sheet1") Set ws2 = Worksheets("sheet2") For i = 2 To ws1.Cells(Rows.Count, 1).End(xlUp).Row For j = 2 To ws2.Cells(Rows.Count, 1).End(xlUp).Row If ws2.Cells(j, 2) Like ws1.Cells(i, 2) & ws1.Cells(i, 3) & "*" Then ws2.Cells(j, 3) = ws1.Cells(i, 1) End If Next j Next i End Sub 'この行まで 参考になれば良いのですが 的外れならごめんなさいね。m(__)m

bigin888
質問者

補足

すいません、期待通りの動きになったのですが これを同じブック内ではなく違うブックから参照する場合の 指定法はどうすればよろしいでしょうか? この場合代入される側のSet ws2 = Worksheets("sheet2")の シート名を指定しなくてもいい方法はありませんか シート名が固定ではないので開いているシートで動作するように したいのですが。

関連するQ&A

  • エクセルのVLOOKUPで「検索値」を複数設定したいのですが。

    エクセルのVLOOKUPで「検索値」を複数設定したいのですが。 例えば A列 都道府県名 B列 市区町村名 C列 町名 D列 番地 E列 人口 F列 面積 という表Aがあります。 自分の持っている都道府県名、市区町村名、町名リスト(表Aの中から数個だけピックアップしたもの)に人口を(表Aから引っ張ってきて)投入したいのですが、町名だけでVLOOKUPを使うと、複数個の同じ町名があるためにうまく行きません。 そこでA、B列の都道府県名、市区町村名も「検索値」として含めて、3列とも合致するものを引っ張ってきたいのですが、どうしたらよいのでしょうか?

  • EXCEL マクロ シート 比較

    EXCEL マクロ でシート間のデーターをシート2を基本に比較してシート3へ結果を出す 新規・削除と表示する。 シート1       シート2            シート3 氏名  コード    氏名   コード      氏名   コード A列   B列      A     B        A     B    C 山川   1001    山川   1001      1002   谷    削除 谷    1002    空     1003      1005   海    新規   空    1003    海     1005 田    1006    田     1006 まことにお忙しいところよろしくお願いいたします。

  • ★エクセルマクロコード教えていただけますでしょうか

    マクロのコードを組みたいと考えておりますが、 ほとんど初心者のため、お詳しい方の力を貸していただきたい次第でございます。 m(__)m ○オートフィルターーでデータをソートし、そのソートごとのシートを自動作成。  その後、そのシートを各フォルダに保存したい。 あるデスクトップ上にあるエクセルシート「管理DB」の「sheet1」にある管理データ A列(グループa~e)、B列(登録日)、C列(ステータス)によって構成されているシートで、 1.A列「グループ」「a」でオートフィルター 2.その中でB列、「登録日」が「2012年9月」以前のものをオートフィルター 3.その中で、さらに「ステータス」が「在庫中」のものをオートフィルター 4.3段階のオートフィルター後にできた結果を、別のエクセルシートとして作成。 5.そのエクセルシートをデスクトップにある「フォルダX本部」に保存。 1~5の一連の作業をグループがなくなるまで繰り返したいと考えています。 1.A列「グループ」「b」でオートフィルター 2.その中でB列、「登録日」が「2012年9月」以前のものをオートフィルター 3.その中で、さらに「ステータス」が「在庫中」のものをオートフィルター 4.3段階のオートフィルター後にできた結果を、別のエクセルシートとして作成。 5.そのエクセルシートをデスクトップにある「フォルダY本部」に保存。 ※一連の作業の中で、グループ名と、シートの保存先が変わる以外、この作業の繰り返し。 以上の作業を実行するマクロを組むことは可能でしょうか。 また、マクロのコードを教えていただけると幸いです。 マクロについてお詳しい方、何卒よろしくお願いいたします。

  • エクセルマクロについて

    お世話になります。 エクセルのマクロについて不慣れなためご質問させてください。 下のような表がありこれを集計して新しく表にしなおしたいと思っています。 1列目 2列目 A    XXXX B    XXXX C    XXXX A    XXXX A    XXXX B    XXXX 1列目の同じ文字列を数えて表を作りなおしたいのです。 1列目  2列目 A     3   ←数えた回数を入れたいと思います B     2 C     1 初めの表はマクロで作成出来たのですが2つめの表を作成する エクセルマクロを作成したいと思っています。 サンプルを頂けると助かります。

  • 完全一致したら代入するマクロを教えてください

    エクセルのSheet1のa列にある文字列と、Sheet2にあるa列にある文字列と完全一致したら、前者のセルの右隣に後者のセルの右隣の文字列を代入するマクロをお教えください。単純にvlookup関数を使えばいいのですが、VBAで行いたいのです。よろしくお願い申し上げます。

  • エクセルのマクロを知りたい

    エクセルで,たくさんのデータが入力された【シートa】があります。 新しく【シートb】を作成して,そこに空白の表(1)~(10)までを作成します。 (ちなみに表(1)は1行から始まり100行まで,表(2)は101行から始まり200行まで・・・・といった感じです) 【シートb】の表(1)には,【シートa】でA列に「1」が入力されているデータを抽出して,それをB列の昇順に並べて記入しなさい。同様に,表(2)には,【シートa】でA列に「2」が入力されているデータを抽出して,それをB列の昇順に並べて記入しなさい。・・・というのを表(10)まで続けます。 上記のような命令をボタン一つで操作できるようなマクロを教えて欲しいのです。 お願いします。

  • エクセルのマクロについて

    エクセルでマクロを組んでいますが、ひとつだけ再現できず困っています。 A1からE100までの表で、A列からD列までの数値をE列で○と×で判定します。 この時、E列が○の場合にA,B,D列のデータをクリアしたいのです。 マクロのコードがわかれば助かります。よろしくお願いします。

  • エクセルのマクロについて

    エクセルマクロについて教えてください 現在作ろうとしているマクロは下記の通り A列(発注日)   B列(発注品名)   M列(納入日) 20130822       A           20130826 20130822       B           20130826 20130823       C           20130827 20130823       D           20130827 20130824       E           20130827 20130825       F           20130828   ・          ・              ・   ・          ・              ・  続く         続く            続く 毎週作成する資料の為、発注件数や納入日は作成のつど 変わってきます。 上記の内容でエクセルシートに表があった場合 N列       O列 20130826    2件 20130827    3件 20130828    1件 と表記したいのですが、どのようにマクロを作れば良いか 誰かご教授して頂けませんでしょうか?

  • Excel 2007 マクロ 表の集計について

    Excel 2007 マクロ 表の集計について 2つのシート(Sheet1とSheet2)の情報を集計して Sheet3に反映するマクロを考えています。 (1)Sheet1のC列、D列、E列とSheet2のC列が空欄の場合は  Sheet3に反映しません。 (2)Sheet1のC列、D列、E列とSheet2のC列のいずれかに数値が  入っている場合にはSheet3に行を反映します。  ※Sheet3に反映する際に、Sheet1とSheet2のキー(A列)は  反映しません。  各Sheetの表は画像を添付します。  どのようなマクロを作成すればよろしいでしょうか。  マクロの超初心者です。  マクロのサンプルをご紹介頂けますでしょうか。

  • マクロで非表示シート内にあるデータの検索方法が知りたい

    マクロの勉強をしているのですが、練習で郵便番号検索ツールを作成したいと思っています。 概要  まず、郵便番号7桁を入力する。変換ボタンを押すと、住所を検索し、漢字で住所を表示し、読み仮名をひらがなで表示する。 とまぁ、こんな感じのものを作りたいと考えています。 で、取りあえず郵便番号と住所(読み仮名つき)一覧表を作りました。 一覧表は・・ A1には郵便番号、A2には都道府県名、A3には市区町村名、A4には町名、A5には市区町村名(ふりがな)、A6には町名(ふりがな) となっています。 さて、ここからが問題なのですが・・・ ユーザーフォームを使ってこれを使えるようにしたいのですが、検索方法がわかりません。 イメージとして、テキストボックスに入力してもらい、変換ボタンを押すと、エクセルシートの中から該当する郵便番号を検索し、その隣にある内容を変数に代入し、持ってこようと思っていました。 でも、ここで問題が・・・ 検索してるところが見えるとかっこ悪い 笑 というわけで・・もうちょっと何とかしたいんですけど、シートを非表示にしちゃうと、マクロの記憶で得た検索方法はエラーになっちゃうんですよね。。 そんなわけで、これをどうにかできないか考えています。非表示シートの検索方法があれば一番いいのですが、もしない場合は代替案を教えていただけるとありがたいです。 よろしくお願い致しますm(_ _)m

専門家に質問してみよう