- ベストアンサー
Excelで住所を分ける方法
- Excelで住所を分ける方法について教えてください。
- 住所欄に入力されている都道府県、市町村、町名番地、建物名、号室を分ける方法を知りたいです。
- 文字数が12文字を超える場合にも対応した住所の分け方を教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
日本の全住所を分解するわけではないと思うので、とりあえず試行してみます。 住所が12文字を超えた場合、区>町>市>村の順で検索しています。、 A1に住所があるとして、B1とC1に分けてみます。後は人の目で確認が必要です。 B1に =IF(AND(A1<>"",LEN(A1)>12),IFERROR(LEFT(A1,FIND("区",A1)),IFERROR(LEFT(A1,FIND("町",A1)),IFERROR(LEFT(A1,FIND("市",A1)),IFERROR(LEFT(A1,FIND("村",A1)),"")))),A1&"") C1に、 =IFERROR(RIGHT(A1,LEN(A1)-LEN(B1)),"") B1の算式を並べると、(改行しているのでコピーできません) =IF(AND(A1<>"",LEN(A1)>12), IFERROR(LEFT(A1,FIND("区",A1)), IFERROR(LEFT(A1,FIND("町",A1)), IFERROR(LEFT(A1,FIND("市",A1)), IFERROR(LEFT(A1,FIND("村",A1)),"")))), A1&"") となっています。何をしているかは自明と思います。 住所にはいろいろなパターンがあります。入力ミスもあるかもしれません。式の結果は完全ではないので確認してください。
その他の回答 (2)
- chie65536(@chie65535)
- ベストアンサー率44% (8740/19838)
>東京都六王子市海山川町8 | 8-888 この場合、「切る場所」に注目して下さい。 「左(先頭)から1文字づつ見て行って、最初に数字が現われた場所」が切る場所です。 もし「最初から数えて13文字目以内に数字が現われたなら、そこで切ります。 すると、必ず >東京都六王子市海山川町| 88-888 で切れる筈です。 しかし、13文字以内に現われなかった場合は、 >東京都六王子市|海山川町88-888 のように、もっと前で切らないといけません。 どこで切るかの判断は、郵便番号一覧の「市町村名(町域より前の部分)」を使用するしかありません。 郵便番号一覧には 郵便番号:012-0000 市町村名:東京都六王子市 町域:以下に記載の無い場合 郵便番号:012-3456 市町村名:東京都六王子市 町域:海山川町 と載っています(公式サイトでダウンロードできます) 「東京都六王子市海山川町88-888」と、郵便番号一覧の市町村名の「東京都六王子市」を比較すると、「東京都六王子市」まで完全に一致するので、 >東京都六王子市|海山川町88-888 で切れると判断出来ます。 但し、この場合、住所の入力時の「ブレ」が問題になります。 例えば 東京都五王子市緑ヶ丘 東京都五王子市緑ケ丘 東京都五王子市緑が丘 は一致しません。 同じ住所なのに郵便番号一覧と一致しない問題は、上記以外に「蛍と螢」や「曽と曾」など、いっぱいあります。 また「市」や「町」で切る訳にもいきません。世の中には「兵庫県南あわじ市市市」と言う地名が存在しますから。 業務で住所項目の加工とかを経験した事がありますが、一番手っ取り早いのは「人海戦術で手動で分離する」です。 経験から学んだ事は 「分割されている住所を1つに連結してしまった場合、二度と元通りには分離できない」 って事です。 ぶっちゃけ、質問者さんのケースでは「自動での正しい分離は不可能」です。 自動でやるなら 「東京都六王子市海山|川町88-888」 のように「市町村名や町域名が途中で切れても気にしない」しかありません。
お礼
早速、ご回答頂きましてありがとうございました。 「人海戦術で手動で分離する」 正直、これが正解かとも思ったのですが、 できるところまで自動でできないかとも思いまして・・・。
- aokii
- ベストアンサー率23% (5210/22062)
住所には間違いもありますので、記載された住所のチェックを兼ねて、郵便番号別の住所を以下のURLから入手し、VLOOKUPで郵便番号別の住所と一致した場合のみ、郵便番号別の住所の文字数をエクセル関数でカウントし、カウント数+1以降をMID関数で分離することをお勧めします。 あるいは、B2セル以降に住所が有る場合、以下の式のように、都道府県別に分離してから、都道府県市区町村他と番地を区分することもできます。(注:以下の式を使う場合は、番地以下の文字は全て半角に変換してから行ってください。) C2セルに、=LEFT(B2,LEN(B2)-LEN(RIGHT(B2,LEN(B2)*2-LENB(B2)))) D2セルに、=RIGHT(B2,LEN(B2)*2-LENB(B2))
お礼
ご回答ありがとうございます。 先の回答者様より、「人海戦術で手動で分離する」 これが、正解かとも思ったのですが、 教えて頂きましたようにやってみましたところ、 大変良い結果となり、一部手動で直しまして、 解決いたしました。 だいぶ楽に作成することができました。 ありがとうございました。