- 締切済み
エクセル関数で住所から丁目番地、建物名を抽出したい
エクセルで関数を使って、住所から、都道府県、市区町村、丁目番地、建物名をそれぞれ抽出するにはどうしたらよいですか? いま、C列に住所が入っています。 D列に、=LEFT(C3,4-SUM((MID(C3,3,1)={"都","道","府","県"})*1))という関数で都道府県を抽出しました。 F列に、=IF(E2="東京都", IF(COUNT(FIND({"東村山","武蔵村","羽村市"},LEFT(I2,3))), LEFT(I2,FIND("市",I2)), LEFT(I2,MIN(FIND({"市","区","町","村"},I2&"市区町村",2))) ), IF(COUNT(FIND({"今市市","四日市","八日市","廿日市"},LEFT(I2,3))), LEFT(I2,FIND("市",I2,FIND("市",I2)+1)), IF(IF(COUNT(FIND({"蒲郡市","大和郡","小郡市"},LEFT(I2,3))),"市",IF(COUNT(FIND({"余市郡","高市郡"},LEFT(I2,3))),"郡",MID(I2,MIN(FIND({"市","郡"},I2&"市郡",2)),1)))="市", IF(COUNT(FIND({"札幌市","仙台市","千葉市","横浜市","川崎市","名古屋","京都市","大阪市","神戸市","広島市","北九州","福岡市"},LEFT(I2,3))), LEFT(I2,FIND("区",I2)), LEFT(I2,FIND("市",I2,2)) ), IF(COUNT(FIND({"佐波郡玉村","恵那郡岩村","東宇和郡野","杵島郡大町","北松浦郡鹿"},LEFT(I2,5))), LEFT(I2,FIND("郡",I2)+3), LEFT(I2,MIN(FIND({"町","村"},I2&"町村",FIND("郡",I2)+2))) ) ) ) ) という関数を使って市区町村を抽出しました。 あとは、丁目番地と建物名を別々のセルに抽出したいです。 よきアドバイスをお願いいたします。 区切りに半角空いてるとかいうことはありません。 膨大な住所録を処理したいので、例外が多いのは使えません。 なかなか厳しい質問だとは思いますが、どうぞご教授くださいませ。よろしくお願いいたします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- ryo_ky
- ベストアンサー率47% (112/237)
具体的な関数を組み立てた訳ではないのですが、考え方をとりあえず述べたいと思います。 質問者様は市区町村間までの抽出ができたという事は、逆に言えば丁目と建物名を合わせた情報を抽出できているという事ですね。 そこで書かれている情報が 1-12-8 とか 5丁目17番203号 など色々なフォーマット(書き方)があると思いますので、これらを同一の書き方にできれば、抽出は比較的容易になると思います。 フォーマットの変換はSUBSTITUTEとワイルドカード(*)でできると思います (参考:http://www.efcit.co.jp/cgi-bin2/exqalounge.cgi?print+201003/10030024.txt)
- daredakisama
- ベストアンサー率50% (90/177)
> という関数を使って市区町村を抽出しました。 おつかれさまでした。 > 丁目番地と建物名を別々のセルに抽出したいです。 > 区切りに半角空いてるとかいうことはありません。 きついです。 「丁目」に関して可能性があるとしたら、日本郵便提供の郵便番号データ http://www.post.japanpost.jp/zipcode/download.html などとのマッチングくらいでしょうか。 番地・建物名は更に厳しいでしょうね。 法則性が一つもないでしょ? ここに「必ず"番地"の文字」が入っているなら別ですが、 そうではない正式な住所も多数存在しますからね。 「膨大」がどの程度の量かわかりませんが、 力技で頑張るしかないのではないでしょうかね。
お礼
どうもありがとうございました。
補足
丁目番地で一つ、建物名で一つ、あと二つ抽出したいです。とあるプロジェクトの一部ですので、手作業を途中で入れられるか不明です。
お礼
どうもありがとうございました。
補足
今、C2に住所が入っていて、L2に、 =RIGHT(C2,LEN(C2)-MIN(FIND({0,1,2,3,4,5,6,7,8,9},ASC(C2)&1234567890)-1)) という関数を使って、番地以降を抽出しました。あとは建物名だけになったのですが、どうしようか悩んでます。