• 締切済み

エクセル関数で住所から丁目番地、建物名を抽出したい

エクセルで関数を使って、住所から、都道府県、市区町村、丁目番地、建物名をそれぞれ抽出するにはどうしたらよいですか? いま、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))) ) ) ) ) という関数を使って市区町村を抽出しました。 あとは、丁目番地と建物名を別々のセルに抽出したいです。 よきアドバイスをお願いいたします。 区切りに半角空いてるとかいうことはありません。 膨大な住所録を処理したいので、例外が多いのは使えません。 なかなか厳しい質問だとは思いますが、どうぞご教授くださいませ。よろしくお願いいたします。

みんなの回答

  • ryo_ky
  • ベストアンサー率47% (112/237)
回答No.2

具体的な関数を組み立てた訳ではないのですが、考え方をとりあえず述べたいと思います。 質問者様は市区町村間までの抽出ができたという事は、逆に言えば丁目と建物名を合わせた情報を抽出できているという事ですね。 そこで書かれている情報が 1-12-8 とか 5丁目17番203号 など色々なフォーマット(書き方)があると思いますので、これらを同一の書き方にできれば、抽出は比較的容易になると思います。 フォーマットの変換はSUBSTITUTEとワイルドカード(*)でできると思います (参考:http://www.efcit.co.jp/cgi-bin2/exqalounge.cgi?print+201003/10030024.txt

moca-chyan
質問者

お礼

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

moca-chyan
質問者

補足

今、C2に住所が入っていて、L2に、 =RIGHT(C2,LEN(C2)-MIN(FIND({0,1,2,3,4,5,6,7,8,9},ASC(C2)&1234567890)-1)) という関数を使って、番地以降を抽出しました。あとは建物名だけになったのですが、どうしようか悩んでます。

回答No.1

> という関数を使って市区町村を抽出しました。 おつかれさまでした。 > 丁目番地と建物名を別々のセルに抽出したいです。 > 区切りに半角空いてるとかいうことはありません。 きついです。 「丁目」に関して可能性があるとしたら、日本郵便提供の郵便番号データ http://www.post.japanpost.jp/zipcode/download.html などとのマッチングくらいでしょうか。 番地・建物名は更に厳しいでしょうね。 法則性が一つもないでしょ? ここに「必ず"番地"の文字」が入っているなら別ですが、 そうではない正式な住所も多数存在しますからね。 「膨大」がどの程度の量かわかりませんが、 力技で頑張るしかないのではないでしょうかね。

moca-chyan
質問者

お礼

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

moca-chyan
質問者

補足

丁目番地で一つ、建物名で一つ、あと二つ抽出したいです。とあるプロジェクトの一部ですので、手作業を途中で入れられるか不明です。

関連するQ&A

  • エクセル関数 住所から町村領域を取り出す。

    エクセルの関数で○○市○○町xxx番地などとなっている住所の 区、市、郡を除いたそれ以降の住所だけ取り出したいのですが =FIND("市",B2) =REPLACE(B2,D2,3,"") このFINDに複数の検索文字列を指定して、当てはまる数値を出すにはどうのようにすればよいでしょうか?

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

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

  • エクセルで住所を違うセルに分けたいのですが・・・

    エクセル2000で住所禄を作ってあるのですが、そこから市町村の前の部分で 分けたいのですが可能でしょうか? ○○郡 △△町 ・・・・・ □□郡 ××村 ・・・・・     ◆◆市 ・・・・・ この例で言うと現在一つのセルにすべて入っている内容を郡と町、村、市と・・・・の3つの部分をそれぞれセルに分けたいのです。 ◆◆市が郡の列に入っても構いません。 たくさんあるデータをソートをかけて拠出していきたい為、何とかして分けられないものかと思案しています。 可能であれば方法を教えて下さい。

  • 【Excel】住所から市区町村名を抜き出す方法

    いつもお世話になります。セル内に住所が入力してあり、その住所を元に地方公共団体コードをつけたいと思います。地方公共団体コードとは市区町村ごとに充てられた6桁の数字です。 A列に住所が入力してあります。(県名は入力してありません。)次にB列に以下のような式を入力しました。 =if(find("区",a1),left(a1,find("区",a1)),if(find("郡",a1),left(a1,find("郡",a1)),if(find("市",a1),left(a1,find("市",a1)),"") A列に区が含まれていたら、左から区の部分までをぬきだし、偽なら郡を探し、真ならば左から郡のところを抜き出し、偽なら市を探し、真ならば左から市のところを抜き出し偽ならば何もしない。 すごく、分かりづらいかもしれませんが・・・。ごめんなさい。 うまくいかないのですが、良い方法はありませんでしょうか?

  • エクセルで文字列を抽出する関数

    エクセルでデータ処理をしています。 例えばA列に Iwate kenichi Akita hachiro gata (1992) Yamagata shi,1905 というデータがあり、同じ関数を使ってそれぞれB列に Iwate kenichi Akita hachiro gata Yamagata shi と抽出したいので、 =IF(FIND("(",A1),LEFT(A1,FIND("(",A1)-1),IF(FIND(",",A1),LEFT(A1,FIND(",",A1)-1),A1))という式を作ってみましたが、うまく処理できません。 どのような式を作れば上手くいきますか?マクロは使えませんので、関数でお願い致します。

  • Excel 住所分け市区郡

    ここで教えて頂いた式なのですが セルB1に =IF(MID(A1,4,1)="県",LEFT(A1,4),LEFT(A1,3)) セルE1に =MID(A1,LEN(B1)+1,150) セルC1に =IF(ISERROR(FIND("大和郡山市",E1))=FALSE,"大和郡山市",IF(ISERROR(FIND("四日市市",E1))=FALSE,"四日市市",IF(ISERROR(FIND("廿日市市",E1))=FALSE,"廿日市市",IF(ISERROR(FIND("郡山市",E1))=FALSE,"郡山市",IF(ISERROR(FIND("市原市",E1))=FALSE,"市原市",IF(ISERROR(FIND("郡上市",E1))=FALSE,"郡上市",IF(ISERROR(FIND("蒲郡市",E1))=FALSE,"蒲郡市",IF(ISERROR(FIND("小郡市",E1))=FALSE,"小郡市",IF(ISERROR(FIND("市川市",E1))=FALSE,"市川市",IF(ISERROR(FIND("郡",E1))=FALSE,LEFT(E1,FIND("郡",E1)),IF(ISERROR(FIND("市",E1))=FALSE,LEFT(E1,FIND("市",E1)),IF(ISERROR(FIND("区",E1))=FALSE,LEFT(E1,FIND("区",E1)),IF(ISERROR(FIND("町",E1))=FALSE,LEFT(E1,FIND("町",E1)),IF(ISERROR(FIND("村",E1))=FALSE,LEFT(E1,FIND("村",E1)),"")))))))))))))) セルD1に =SUBSTITUTE(SUBSTITUTE(A1,B1,"",1),C1,"",1) 大阪府大阪市西淀川区福町3丁目1-50→大阪府 大阪市 西淀川区福町3丁目1-50 兵庫県神戸市兵庫区芦原通1丁目2番26号→兵庫県 神戸市 兵庫区芦原通1丁目2番26号 となります。これを 大阪府大阪市西淀川区福町3丁目1-50→大阪府 大阪市西淀川区 福町3丁目1-50 兵庫県神戸市兵庫区芦原通1丁目2番26号→兵庫県 神戸市兵庫区 芦原通1丁目2番26号 と市と区は同じセルに分けたいです。郡も同じで市と同じセルに分けたいです。 分ける区分は都道府県  市区郡  町名・番地と三つに分けます。

  • データ内(同じセル内)の住所を分けて抽出したい

    ACCESSのテーブルデータで、 1つの項目(列)に、 ●●県 ●●●市 南2-3-12 という住所項目があるとします(市のところは村、郡となっているケースもあり)。 これをクエリーで抽出する際に、 ●●県 ●●●市 までしか抽出しないようにすることは可能でしょうか? 市以降の南2-3-12は抽出しない。 (県、市、南の間は半角スペースがそれぞれある) またそれとは別途で、 それぞれにセルを分けることはできるでしょうか? → ●●県 ●●●市 南2-3-12  の上記それぞれを別々の項目/セルに分割する もしアクセスで難しいようであればエクセルでもOK。 また上記とは別途で、半角スペースがない(文字が連続している)場合にも 出来る方法はあるのでしょうか。 ※会社のデータ保存がいけてなく、県、市区郡、以降~と すべて住所内容が1つのセルにおさまっており、細かい地域分析ができない為。

  • Excelで1セル内の住所を市郡町街と丁目以下の地番等に分離する方法は?

    Sheet1のA列に例えば群馬県内の住所のリストがあります。(架空の住所です。) 前橋市池端町3-2-21……(セルA1) 桐生市黒保根町水沼7-3-5 高崎市大沢町1-18-204 沼田市佐山町8-6-5-402 勢多郡北橘村下箱田396 多野郡吉井町岩井27-5 以下1,000件程度 Sheet2のA1:B1538に郵政公社からダウンロードした群馬県内の郵便番号一覧表があり、A列に市郡町街大字等、B列に対応する郵便番号があります。(名前定義を仮に「〒」とします) Sheet1の住所の郵便番号を検索する必要がありますが、そのためには住所の丁目地番より左の部分(市郡町街大字等)を分離しなければなりません。 これをマクロを使わずに1個の計算式で表示したいといろいろ工夫しましたが、どうもいい知恵が浮かびません。仕方なく一旦B列(B1)に =SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A1,9,1),8,1),7,1),6,1),5,1),4,1),3,1),2,1) という長たらしいネスト式を使って「2~9」の数値をすべて「1」に置き換え、 C列(C1)に =LEFT(A1,FIND(1,B1)-1) と計算式を入れて市郡町街大字等を抽出し、D列(D1)に VLOOKUP(C1,〒,2,FALSE) と入れてようやく郵便番号を検索しております。 結果としてはこれで正しい答は出るのですが、標準搭載の関数だけで(マクロを使わずに)何かもっと簡単な方法がありはしないかという気がしてなりません。 ご存知の方があればどうか教えてください。(OS等はWinMe→Excel2000Proです。)

  • エクセルのマクロにLEFT関数のような働きはありませんか?

    顧客データから抽出したデータの、書式を整える作業を自動記録したマクロを使ってやっています。 データの住所欄から、市か郡から下の部分を削除する作業があるのですが、抽出される顧客データは毎日違うので、自動記録のマクロでは出来ないため、この部分は手作業で行なっています。 この「住所の市または郡から下の部分を削除する作業」をマクロで行なう方法は無いでしょうか? 自動記録のマクロでは以下のようになっています。 Cells.Replace What:="○○県××市○○町1-2-3", Replacement:="○○県××市", LookAt:=xlPart, _SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ReplaceFormat:=FalseCells.Replace What:="○○県**市△△町4-5-6", Replacement:="○○県**市", LookAt:=xlPart, _SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ マクロに、ワークシート関数の=LEFT(A1,(FIND("市",A1)))と同じ様な働きを記述できればいいのか?とも思うのですが、やり方がわかりません。

  • エクセルで作った住所録データの市区町村のあとを消したい。

    住所は番地まで1つのセルに入っています。 Ex. 東京都千代田区広尾1-1-1-A-101  → 東京都千代田区 昨日=LEFT(A1,FIND("区",A1,1))で教えていただいて助かったのですが、 さらに、市、町、村がある場合の指示方法を知りたいので、おわかりになりましたら、よろしくお願いしますm(_ _)m

専門家に質問してみよう