【お題】NEW演歌

こんにちは

DM発送用の名簿を整理しています。

F列に、住所欄に 都道府県 市町村 町名番地 建物名 号室 までが
一つのセルに入力されています。

小さめのタックシールの為、印字する際、
都道府県 市町村 町名番地の文字が、
12文字を超えると見にくくなります。
※それを超えても文字を縮小して全体を印字します。

番地と建物名の間にスペースがあるので、そこで分けるようにして
建物名および号室は、H列に移動しました。

住所(都道府県 市町村 町名番地)の文字が12文字を超える場合、
町名のところでG列に分ける方法を教えて下さい。

東京都六王子市海山川町88-888 青空荘88号室 このような住所の場合、

青空荘88号室 はH列に移動しました。

東京都六王子市海山川町88-888 は、12文字を超えるため、
列を分けたいのですが、

東京都六王子市海山川町8 | 8-888
とならないように、
東京都六王子市海山川町| 88-888
若しくは、
東京都六王子市|海山川町88-888

となるようにしたいと思います。

Excel2013です。

よろしくお願いします。

A 回答 (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&"")

となっています。何をしているかは自明と思います。
住所にはいろいろなパターンがあります。入力ミスもあるかもしれません。式の結果は完全ではないので確認してください。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

先の回答者様より、「人海戦術で手動で分離する」
これが、正解かとも思ったのですが、
教えて頂きましたようにやってみましたところ、
大変良い結果となり、一部手動で直しまして、
解決いたしました。

だいぶ楽に作成することができました。

ありがとうございました。

お礼日時:2014/07/01 18:11

>東京都六王子市海山川町8 | 8-888



この場合、「切る場所」に注目して下さい。

「左(先頭)から1文字づつ見て行って、最初に数字が現われた場所」が切る場所です。

もし「最初から数えて13文字目以内に数字が現われたなら、そこで切ります。

すると、必ず

>東京都六王子市海山川町| 88-888

で切れる筈です。

しかし、13文字以内に現われなかった場合は、

>東京都六王子市|海山川町88-888

のように、もっと前で切らないといけません。

どこで切るかの判断は、郵便番号一覧の「市町村名(町域より前の部分)」を使用するしかありません。

郵便番号一覧には

郵便番号:012-0000
市町村名:東京都六王子市
町域:以下に記載の無い場合

郵便番号:012-3456
市町村名:東京都六王子市
町域:海山川町

と載っています(公式サイトでダウンロードできます)

「東京都六王子市海山川町88-888」と、郵便番号一覧の市町村名の「東京都六王子市」を比較すると、「東京都六王子市」まで完全に一致するので、

>東京都六王子市|海山川町88-888

で切れると判断出来ます。

但し、この場合、住所の入力時の「ブレ」が問題になります。

例えば

東京都五王子市緑ヶ丘
東京都五王子市緑ケ丘
東京都五王子市緑が丘

は一致しません。

同じ住所なのに郵便番号一覧と一致しない問題は、上記以外に「蛍と螢」や「曽と曾」など、いっぱいあります。

また「市」や「町」で切る訳にもいきません。世の中には「兵庫県南あわじ市市市」と言う地名が存在しますから。

業務で住所項目の加工とかを経験した事がありますが、一番手っ取り早いのは「人海戦術で手動で分離する」です。

経験から学んだ事は

「分割されている住所を1つに連結してしまった場合、二度と元通りには分離できない」

って事です。

ぶっちゃけ、質問者さんのケースでは「自動での正しい分離は不可能」です。

自動でやるなら

「東京都六王子市海山|川町88-888」

のように「市町村名や町域名が途中で切れても気にしない」しかありません。
    • good
    • 0
この回答へのお礼

早速、ご回答頂きましてありがとうございました。

「人海戦術で手動で分離する」
正直、これが正解かとも思ったのですが、
できるところまで自動でできないかとも思いまして・・・。

お礼日時:2014/07/01 18:08

住所には間違いもありますので、記載された住所のチェックを兼ねて、郵便番号別の住所を以下の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))
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報