[[20130824095341]] 『住所から都道府県or市町村を抜き出したい(※都道普x(なな) >>BOT

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『住所から都道府県or市町村を抜き出したい(※都道府県の記載がない住所もあり)』(なな)
Windows7,Excel2007使用です。

住所から都道府県名また市町村名を抜き出したいです。

抜き出す元のリストの記載がバラバラで、
「埼玉県××市」など、都道府県名で記載がはじまる住所もあれば、
「さいたま市××」など、市町村名で記載が始まる住所もあります。

都道府県名の記載ではじまるものは、都道府県名を、
市町村名の記載ではじまるものは、市町村名を抜き出したいです。

IF関数や、文字列操作関数を使って、都道府県名を抜き出すことは
できたのですが、市町村名までカバーすることができません。

ご教授をお願いいたします。


 これまでもこのような質問は多くあったので、まずは検索してみるとよいと思いますが、
 そのたびに言われるのは市町村名の中に「市」「町」「村」がある名前をどうする
 という問題です。
 例えば市川市、村山市、町田市、などですね。

 都道府県は47ですから、テーブルにしてCOUNTIF などで有無の判定ができると思いますが、
 市町村は2文字目以降に市・町・村の文字が出るまでを切るのが簡易判定でしょうか。

 途中で切れてしまったものは、人の眼で修正になるかもしれません。
 郵便辞書などで全市町村名を入手することも可能かもしれませんが、その手間をかけるのは
 どのくらいのデータを処理するか次第だと思います。

 まずは学校で「市町村名」などで検索をしてはどうでしょうか。
[[20120524002740]] 『文字の抜き出しと集計』(a-su)
[[20050121161337]] 『住所を離す方法』(5963)
 (Mook)

 基本的に、地名処理は、例外処理が多いため、完全自動は無理だと思います。
 ただし、下記の様なコードで、大体の分類は出来ると思いますが・・・。
 A列に元データ、C列に結果表示
 Sub test()
   Dim i&, j&, S$, v, w
      v = Cells(1, 1).CurrentRegion.Resize(, 1).Value
      ReDim w(1 To UBound(v), 1 To 1)
      For i = 1 To UBound(v)
         S = Left(v(i, 1), 5) '先頭の 5文字で判断
         Select Case True 'S
            Case S Like "*都*": w(i, 1) = Split(v(i, 1), "都")(0) & "都"
            Case S Like "*道*": w(i, 1) = Split(v(i, 1), "道")(0) & "道"
            Case S Like "*府*": w(i, 1) = Split(v(i, 1), "府")(0) & "府"
            Case S Like "*県*": w(i, 1) = Split(v(i, 1), "県")(0) & "県"
            Case S Like "*市*": w(i, 1) = Split(v(i, 1), "市")(0) & "市"
            Case S Like "*区*": w(i, 1) = Split(v(i, 1), "区")(0) & "区"
            Case S Like "*町*": w(i, 1) = Split(v(i, 1), "町")(0) & "町"
            Case S Like "*村*": w(i, 1) = Split(v(i, 1), "村")(0) & "村"
         End Select
      Next
      Cells(1, "c").Resize(UBound(w), 1).Value = w
 End Sub
 (暇人)

 既に回答がついている段階になって、素朴な疑問をアップして恐縮ですけど、、

 >都道府県名の記載ではじまるものは、都道府県名を、 
 >市町村名の記載ではじまるものは、市町村名を抜き出したいです

 上の要望ですと、例えば、
  埼玉県さいたま市南区
  さいたま市南区
 とあった場合、
  埼玉県
  さいたま市
 を抜き出すことになりますが、階層の違うものを抜き出して意味あるのですか?

 (出来るかどうかは別として)いずれも「埼玉県さいたま市」として認識できなければ
 使える代物にはならないのではありませんか?

 あと、「市町村」と云うお話ですけど、普通は「市区町村」と云っています。
 そして、この中に「郡」がないですけど、それも含めて考えるもんだと思っているのですが、
 この辺りの考え方はどうなっているのですか?

 (半平太) 2013/08/24(Sat) 20:16

Mookさん

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

途中で切れてしまったものは、人の眼で修正になるかもしれません。 郵便辞書などで全市町村名を入手することも可能かもしれませんが、その手間をかけるのは どのくらいのデータを処理するか次第だと思います。

今回はデータベースを作成して、Find関数などの検索文字列関数で
処理をしてみようと思います。
1回の処理量は大したことないのですが、
毎日の業務なので、コツコツとデータベースを作ってみます。

また過去ログを検索したつもりでしたが、
納得のいくものが探せなくて質問をしました。
ですが、記載いただいた

[20120524002740]] 『文字の抜き出しと集計』(a-su) [20050121161337]] 『住所を離す方法』(5963) が役に立ちそうです。
教えていただき、ありがとうございました。


暇人さん

回答ありがとうございます。
最終的にVBA化したいと思っていたので、
とても参考になりました。

例外処理が多いため、完全自動は無理だと思います。 みなさまの意見を参考にデータベースを作って、
処理をしていこうと思います。

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


半平太さん

埼玉県 さいたま市 を抜き出すことになりますが、階層の違うものを抜き出して意味あるのですか?

はい、意味があるので質問させていただきました。

元のデータベースが特殊でして
〜郡や〜区などで住所の記載が始まるものはありませんので、
このように質問させていただきました。


 今更ですが、疑問の捕らえ方に差異があるようなので一言・・・
 半平太先生が本当におっしゃりたいことは
 > (出来るかどうかは別として)いずれも「埼玉県さいたま市」として認識できなければ
 >使える代物にはならないのではありませんか?
 の部分だと思われます。

 同一名称の市区町村一覧
http://ja.wikipedia.org/wiki/%E5%90%8C%E4%B8%80%E5%90%8D%E7%A7%B0%E3%81%AE%E5%B8%82%E5%8C%BA%E7%94%BA%E6%9D%91%E4%B8%80%E8%A6%A7

 それと
 >元のデータベースが特殊でして  
 >〜郡や〜区などで住所の記載が始まるものはありませんので、 
 >このように質問させていただきました。
 元のデータベースがあるなら、抜き出すも逆に利用すればいいのでは?
 県と「市町村」のリストが別々にあるなら、抜き出すときにどちらの極も含まれる文字列を探せば
 一発で解決するような・・・

 (稲葉)

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.