EXCELで住所リストから適切な町名を参照する方法

このQ&Aのポイント
  • EXCELの関数を使用して、住所リストから適切な町名を参照する方法について教えてください。
  • リスト1には、重複する郵便番号と住所がありますが、結合された住所を分割したいです。
  • vlookup関数では、重複する郵便番号の住所2が正しく表示されません。どのようにすれば良いでしょうか?
回答を見る
  • ベストアンサー

EXCELで住所リストから適切な町名を参照したい

EXCELの関数の使い方について、質問させていただきます。 リスト1には、郵便番号と住所のリストが入っていますが、 郵便番号が重複しています。(同じ郵便番号で地名違いのものがある) --------------------------------------------------------------------------------- 【リスト1】 A郵便番号 B県名 C住所1 D住所2 ------------------------------------------------ 0493521  北海道  山越郡長万部町  曙町 0493521  北海道  山越郡長万部町  大町 0493521  北海道  山越郡長万部町  長万部 0493521  北海道  山越郡長万部町  温泉町 0493521  北海道  山越郡長万部町  新開町 0493521  北海道  山越郡長万部町  陣屋町 0493521  北海道  山越郡長万部町  住吉町 0493521  北海道  山越郡長万部町  高砂町 0493521  北海道  山越郡長万部町  本町 0493521  北海道  山越郡長万部町  南栄町 0493521  北海道  山越郡長万部町  元町 --------------------------------------------------------------------------------- リスト2には、ある住所録があるのですが、 住所が結合されているため、 リスト1と郵便番号を使って、 結合住所を、県名、住所1、住所2、住所3に分割したいと思っています。 県名、住所1は、vlookup関数で参照しても問題ないのですが、 住所2は、郵便番号が重複しているため、vlookup関数では、全て「曙町」になってしまいます。 住所2に、適切な地名を表示させたいのですが、どのようにすれば良いでしょうか? --------------------------------------------------------------------------------- 【リスト2】 A郵便番号 B結合住所                 C住所1   D住所2 E住所3 ----------------------------------------------------------------------------------- 0493521  山越郡長万部町長万部XXX-XXXX  山越郡長万部町 長万部  XXX-XXXX 0493521  山越郡長万部町陣屋町XXX       山越郡長万部町 陣屋町  XXX 0493521  山越郡長万部町本町XXXX       山越郡長万部町 本町   XXXX --------------------------------------------------------------------------------- 住所2が正しく出ないため、 住所3も導けず、困っております。 (住所3は、SUBSTITUTE(B1,C1&D1,"") などとして導く予定です。) 何卒、ご教授をよろしくお願い致します。

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

  • ベストアンサー
  • bunjii
  • ベストアンサー率43% (3589/8248)
回答No.3

>郵便番号で絞り込みを考慮しないと難しいようなのですが、 >そういった事を式で実現することは可能でしょうか? 可能ですよ。 郵便番号でなくても住所1(市区町村名)と住所2(大字名)を連結した文字列を検索文字列とすれば単一の行Noがヒットすると思います。 =IF(G2="","",INDEX($D:$D,MAX(IFERROR((FIND(C$1:C$27&D$1:D$27,G2)>0)*1,0)*ROW(D$1:D$27)),1)) それでも複数がヒットするときは都道府県名も連結してみると良いでしょう。

yoh-tkhs
質問者

お礼

bunjiiさん、ご返信いただき、ありがとうございました。 なるほど、連結したものを検索文字列に使うのですね… そういった柔軟な発想が思いつかず、苦戦しておりました。 とても勉強になりました。 いただいた式を完全に理解するのには、まだ時間がかかりそうですが、 勉強したいと思います。 ありがとうございました。

その他の回答 (2)

  • bunjii
  • ベストアンサー率43% (3589/8248)
回答No.2

住所2は次のような方法で抽出できます。 FIND関数は一般的に1つの文字列を1つの長い文字列から検出しますが、配列値を検索文字列として使うこともできます。 =(FIND(リスト1!D:D,B2)>0)*ROW(1:1000) Ctrl+Shift+Enterで確定すると返り値が配列となりますので、MAX関数に渡せは該当の行番号が得られます。 この性質を応用すればINDEX関数と組み合わせて住所2の抽出が可能となります。 貼付画像は同一シートでの検証ですがあなたのデータに合わせて変形してください。 =IF(G2="","",INDEX($D:$D,MAX(IFERROR((FIND(D$1:D$12,G2)>0)*1,0)*ROW(D$1:D$12)),1))

yoh-tkhs
質問者

補足

bunjiiさん 御回答いただき、ありがとうございました。 うわぁ、すごいですね、関数を複雑に組み合わせると、こんな事が出来るんですね。 添付していただいた画像のようにサンプルを作成し、確認したところ、 希望の通りに導くことが出来ました。 ただ、これをサンプルのように狭い地区データではなく、 全国規模の本番データに転用しようとすると難しいみたいで… (考えられる理由) ・サンプルでD列にあたる部分の行数が、本番データでは1万件を超える。 ・全国だと、D列の中でも重複する町名がある。 (例えば「新田」が含まれる町名は、日本全国で1千箇所を超える) よって、郵便番号で絞り込みを考慮しないと難しいようなのですが、 そういった事を式で実現することは可能でしょうか? 例えば、こんなデータで… --------------------------------------------------- リスト1(宮城県の新田が含まれる地域のみ) 9830038,宮城県,仙台市宮城野区,新田 9830039,宮城県,仙台市宮城野区,新田東 9860321,宮城県,石巻市,桃生町新田 9880828,宮城県,気仙沼市,下新田 9880829,宮城県,気仙沼市,新田 9850854,宮城県,多賀城市,新田 9870378,宮城県,登米市,豊里町新田鏡形 9870361,宮城県,登米市,豊里町新田町 9894601,宮城県,登米市,迫町新田 9870422,宮城県,登米市,南方町新田 9894511,宮城県,栗原市,瀬峰新田沢 9872031,宮城県,栗原市,高清水新田 9872263,宮城県,栗原市,築館新田 9810307,宮城県,東松島市,新田 9896711,宮城県,大崎市,鳴子温泉新田 9896226,宮城県,大崎市,古川新田 9896203,宮城県,大崎市,古川飯川 9812116,宮城県,伊具郡丸森町,新田向 9812116,宮城県,伊具郡丸森町,新田東 9812116,宮城県,伊具郡丸森町,新田西 9892351,宮城県,亘理郡亘理町,北新田 9814222,宮城県,加美郡加美町,下新田 9870144,宮城県,遠田郡涌谷町,沖新田 9870144,宮城県,遠田郡涌谷町,下新田 9870140,宮城県,遠田郡涌谷町,新沖新田 9870133,宮城県,遠田郡涌谷町,新田 --------------------------------------------------- リスト2 (県名,住所1,住所2,住所3は、自動検出できた場合の理想のデータ) 郵便番号,結合住所,県名,住所1,住所2,住所3 9894601,宮城県登米市迫町新田山居XXX,宮城県,登米市,迫町新田,山居XXX 9894601,宮城県登米市迫町新田畑中XXX,宮城県,登米市,迫町新田,畑中XXX 9896226,宮城県大崎市古川新田字中宿XXX,宮城県,大崎市,古川新田,字中宿XXX 9896203,宮城県大崎市古川飯川中新田XXX,宮城県,大崎市,古川飯川,中新田XXX 9814222,宮城県加美郡加美町下新田寺浦XXX,宮城県,加美郡加美町,下新田,寺浦XXX --------------------------------------------------- 教えていただいた式を、まだ半分も理解できていないので、頓珍漢な事を 申し上げているかも知れません。(その場合は、失礼いたしました。)

  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.1

エクセルアドインの郵便番号ウィザードを利用するのが簡単です。 Excelのバージョンが記載されていませんので一般論で説明しますが、郵便番号ウィザード(ご自分でバージョンにあった郵便番号ウィザードをインストールしてください)を起動して、リスト2の郵便番号部分を選択し、「郵便番号から住所を作成する」にチェックを入れ、出力先の先頭セルを指定します。 この操作で郵便番号の確定部分(北海道山越郡長万部町までの部分)が抽出できますのでSUBSTITUTE関数でそのあとの町名部分を取得してください。 なお、郵便番号確定部分以降の部分に番地などが入っている場合は、関数を使って番地部分を一括削除することができます。 ひとまず、文字列関数や郵便番号ウィザードは使用できるという前提で一般的な回答をしましたが、上記の説明でわからない部分があったら、その部分を具体的に補足説明してください。

yoh-tkhs
質問者

補足

MackyNo1さん、御回答ありがとうございました。 Excelのバージョンの記入漏れ、大変失礼いたしました。 使用しているExcelは、2010(32ビット)です。OSはWindows7(64ビット)です。 郵便番号ウィザードをインストールしてみたのですが、 いざ使用しようとすると、「郵便番号変換エンジンが見つかりません。」エラーになります。 OSはWindows7(64ビット)ですが、Officeが32ビット版なので、 郵便番号ウィザードもちゃんと32ビット版を選んでいます。 Windows7にIME2010をインストールできないせいなのか、 全く起動してくれません。 よって、試せていない状態でのご返信となり、 大変失礼いたします。 郵便番号ウィザードが正しく起動した場合でも、 郵便番号が重複しているケースがありますので、 確定部分が出ないケースがあるのではないかと想像しております。 例えば、 北海道札幌市厚別区と、 北海道札幌市清田区は、共に、004-0000になります。 IMEの郵便番号辞書は起動したので、こちらで確認したのですが、 候補が2つでます。 郵便番号の確定部分(北海道山越郡長万部町までの部分)が出るとありましたが、 確定部分は、その次の「曙町」なども含まれているのではないでしょうか? また、住所2の後ろに、地番以外の住所が付くケースもあります。 例えば、 「北海道 山越郡長万部町 曙町 字○○ 1-1-1」といった感じです。 関数で番地を消せても、残りの住所が残って「曙町字○○」となってしまい、 理想的な住所2(曙町のみ)にならないのではないかと思うのですが…?? いずれにしても、郵便番号ウィザードが起動してくれないので…しょぼぼんです…。 せっかく御回答いただいたのに、申し訳ありません。 ありがとうございました。

関連するQ&A

  • 〒番号から県名を求める

    エクセルで郵便番号の上3桁から県名を返す式を作りたいと思っています。 XXX-XXXXとなっている、上3桁を取り出し、そこから県名を求めるようなイメージで考えています。 まず、上3桁を取り出す式は、どのような式を作ればいいでしょうか? 次に、そこから県名を求める式を作りたいのですが、001~999までの一覧表を作り、VLOOKUP関数を使うのがいいでしょうか? その場合、001~999までの一覧表を作らなければなりませんが、どのように郵便番号が各都道府県に割り振られているのか、郵便番号について詳しい方、教えてください。 お願いします。

  • Excelで住所録を作ってます。

    あるセルに郵便番号を入力したら隣のセルに住所が表示され(ここまではVLOOKUP関数で作りました)、かつ表示された住所の足りない部分を追加編集できるようにしたいのですが、そんな事は可能ですか?もし可能なら、どのようにしたら出来ますか?宜しくお願いします。

  • ExcelでSheet1/2を作成・・・

    S1に請求書、S2に顧客情報を 初めて質問を投稿いたします。 ExcelでSheet1・Sheet2があります。 Sheet2には顧客情報があります。  A列   B列   C列    D列 会社名 郵便番号  住所  電話番号  a xxx-xxxx a1xxxxx xxx-xxxx b xxx-xxxx b1xxxxx xxx-xxxx c xxx-xxxx c1xxxxx xxx-xxxx c xxx-xxxx c2xxxxx xxx-xxxx c xxx-xxxx c3xxxxx xxx-xxxx とあるとします。 そこで請求書をSheet1を作成してあり、会社名をリストで選択するようにしてあります。会社名を選択するとSheet1上にある、住所が自動的に入力されるようにしてあります。 質問は、会社Cには複数住所があります。そこで、会社Cを選んだときだけ、住所欄にプルダウンで住所を選べるようにしたいのですが、可能でしょうか?

  • エクセルで住所と郵便番号を別のセルに切り出したい

    下記を別々の列に切り出したいのですが、教えてください。 (1) A列  【XXXXXXXXX】    【XXXXXX】  【XXXXXXXX】  A列は 、XXXXXの部分だけB列に抜き出したい。 (2) E列 北海道 〒004-1234 札幌市XX区XXXX1条2-3-4 秋田県 〒011-1234 秋田市XXXX1-1-1 群馬県 〒373-1234 太田市XXXX875-1 は、 F列に郵便番号を(〒のマークはいらない) G列に  北海道札幌市XX区XXXX1条2-3-4      秋田県秋田市XXXX1-1-1 と、はじめの県名と○○市~をつなげて、完全な住所にしたい。 のですが、式を教えてください。    

  • 「-」を入れるExcelマクロ

    Excelで電話番号の表があります。テキストで、電話番号が入力されています。 「xxx-xxxx-xxxx」と「xxxxxxxxxxx」が混在しているので、「xxx-xxxx-xxxx」に揃えたい。 さて、どのようにすればよいでしょうか? 私の、そのリストは、「xxx-xxxx-xxxx」は、全て正しい位置に、「-」が入っているので、修正する必要はありません。 「xxxxxxxxxxx」は、普通の電話の10ケタと、携帯の11ケタが混在しています。 052であれば、052-xxx-xxxx 0561であれば、0561-xx-xxxx に修正したい。しかし、私の、修正したいと思っているリストは、市外局番は、数個です。なので、 052の場合、0561の場合と言ったように、数個分の分岐を作ればよいかなと思っていますが、その方法が判らないので、教えていただけないでしょうか? 関数で作りだしたのですが、なにかとても、複雑な関数になってしまい、訳が分からなくなってしまい、困っています。 私は、マクロの知識が無いのですが、マクロであれば、スマートにできるのは無いかとも思っています。 以上、よろしくお願いします。

  • エクセルで住所の抽出について

    ある1つの所在地から、その周辺にある登録先を抽出したいと思っています。 例えば東京都中央区銀座×-×-×という住所があります。基になる住所は都度変り、全国各地のいろいろな住所が入ります。 これに対して登録してある全国の住所録の中から「東京都中央区」と一致するものだけを抽出したいのです。 最終の合致単位は「市」「郡」「区」です。 FIND関数を使い「都」「道」「府」「県」で区切り、更に「市」「郡」「区」で区切る方法もやってみましたが、県によっては○○市○○区となる場合もあり、うまく出来ませんでした。また、郵便番号で一致させようかとも思いましたが、同じ区内でも郵便番号が違っているのでダメでした。 自分ひとりで使用するのであれば、オートフィルタや並べ替えでコピペするのですか、エクセルに詳しくない営業マンに使用させるため、出来れば関数のみで操作できるようにしたいのです。 お知恵をお借りしたいと思います。よろしくお願いします。

  • 住所リストを自転車で30分圏内で割り振る方法

    仕事であるチェーン店の3000店舗のリストを 自転車で30分圏内ごとに分類をしたいのですが 何かいい方法はありませんでしょうか? リストはエクセルでそこには郵便番号・住所が入っています。 ただ、住所は千代田区有楽町●-●-●が同じフォームに入っています。 郵便番号ごとにわりふったらどうかな~と思ったのですが 郵便番号ごとがどれくらいの広さなのかが分からず・・・ 行き詰まりました。。

  • 郵便番号変換で表示した住所を省略する方法

    たびたびお世話になっています。 エクセルで住所録を作っています。 ≪住所≫人名・地名変換で郵便番号→住所の変換 ≪郵便番号≫関数’=ASC(LEFT(PHONETIC(△),8))で郵便番号を表示 しています。 住所の「県名」が不要なのですが、表示しないようにする方法はありますか? 検索してみたのですが、要領が悪いのか、見つけられませんでした。 よろしくおねがいします。

  • エクセルの関数で教えて下さい。

    今、エクセルで宅急便の送り状に印字する物を作成しております。 レイアウトシ-トは出来まして別シ-トからVLOOKUP関数を使用 しましてデ-タをレイアウトに呼び出そうとしまして作成しているのですが 別シ-ト(LISTというシ-ト名にしてあります)の1つのセルに郵便番号 が7桁入っております。 その郵便番号をレイアウトに沿って入力したいのですがいろいろと調べて みたのですが出来ないでおります。 他の住所や電話番号、得意先名とかはVLOOKUP関数だけで出来た のですがどうしても7桁ある文字列の中の任意の桁数を取り出す事が 分からずにおります。ご教授下さい。宜しくお願い致します。 例えば住所がLISTというシ-トのD列に入っている場合で得意先コ-ド がレイアウトのあるシ-トと同じシ-トのC20に入力してあると仮定しますと =IF(C20="","",VLOOKUP(C20,LIST!$A$1:$I$50,4,FALSE)) という関数で住所がレイアウト欄に入るのですが。 どうしても出来ないでおります。 最悪郵便番号を7つのセルに分割して入力しなおしてやった方が良いのか と思っておりますがご存知の方がいらっしゃいましたら是非教えて頂きたく 質問させて頂きました。 OSはXP SP=3  EXCEL2003を使用しております。

  • 選択(入力)したコードの情報を自動的に表示させる方法

    2枚のシートで下記のような作業をしたいのですが、どのようにすればよろしいのでしょうか。 1枚目のシートに各タイトルのセルに下記のようなデータを入れています。 コード  郵便番号   住所       電話番号 101  xxx-xxxx  横浜市○○区~  xxx-xxx-xxxx 102  xxx-xxxx  川崎市○○区~  xxx-xxx-xxxx 103  xxx-xxxx  府中市○○区~  xx-xxxx-xxxx 2枚目のシートでコードをあるセルで選択(又は記入)すれば自動的に 残りのデータ(市町村、住所、電話番号)が表示されるように設定した いのです。 ただ、送り先としてシールにプリントアウトしたいので、下記のように 縦のセルに表示したいです。     102     ←選んだコード     xxx-xxxx    ←自動で出てくる郵便番号     川崎市○○区 ←自動で出てくる住所     xxx-xxx-xxxx ←自動で出てくる電話番号 申し訳ありませんがご存知の方よろしくお願いいたします。

専門家に質問してみよう