• ベストアンサー

市区町村と番地を分けたいのですが。。。

住所データがあります。「××市○○町1-2-3」。 ここで、「××市○○町」と「1-2-3」を別フィールドに分けたいと思っています。ACCESSまたはExcelのVBAまたは更新クエリ、文字列関数等で行う場合、どのようにすればよいか教えて下さい。なお、「××市○○町」と「1-2-3」の間には空白はありません。

質問者が選んだベストアンサー

  • ベストアンサー
noname#4564
noname#4564
回答No.6

  自前で文字列のマッチング等を行わなくても、Office (97以上?)にバンドルされている、「MSYubin7.dll」を使用すれば可能です。 サンプルコードですが、Accessで、以下の手順を踏み、 (1) レポートの新規作成ボタンを押下。 (2) はがきウィザードを選択。 (3) レポートを作成。 作成されたレポートのクラスモジュール内のAPI宣言部と「Sub DevideAddress」を見れば参考になると思います。 単に「左から最初の数字の位置で文字列を切り出す」(No.2のコメント参照)のではなく、都道府県名、市区町村名、町名、字名すべてを対応辞書と照合してマッチングできるようです。したがって、No.2のコメントで問題点として指摘した「漢数字で番地が記載されたデータ」にも対応できます。 問題点は、OfficeのヘルプにもMSDNにもドキュメントらしいドキュメントがないことです。 (上記ウィザードで生成されたコードにもコメントは皆無です) もともと、参考URLの製品の機能の一部をMicrosoftにOEM提供したもので、Office製品の、いわば「おまけ」程度の位置付けですので、きちんとしたドキュメント、細かな機能が必要であれば、正規の製品版を購入した方がよいかもしれません。 (一度限りの単発仕事なら、そのためだけに買うのはちょっともったいない感じがしますが・・・)  

参考URL:
http://www.adv.co.jp/products/yu7v2/default.htm
uzoozu
質問者

お礼

nanashinogombei さん ありがとうございました。お礼が遅れて申し訳ありませんでした。 Sub DevideAddress(stFullAdd As String, stAdd1 As String, stAdd2 As 。。。 End Sub 助かりました。

その他の回答 (5)

  • non23
  • ベストアンサー率36% (7/19)
回答No.5

回答ではありませんが、私も以前このような状況になりました。アクセス・エクセルではできなかったので、筆まめで解決しましたよ。筆まめに読み込んで、さらにCSVで保存するのですが、保存時の指定で「県」や「番地」を区切ることが出来るので。

uzoozu
質問者

お礼

non 23 さん ありがとうございました。

回答No.4

 AccessもVBAもよく知らない者がこの質問に回答していいものかどうかわからないけど、とりあえず回答してみます。参考になれば幸いです。  私はデータベースソフトに「桐」を使っています。Accessなんかよりずっと敷居が低くて、Excelの代わりにも使えます。  それで、ご質問の問題解決はいとも簡単です。たぶん10分もかからないんじゃないかな。  「桐」を使った場合の考え方はこうです。  まず、住所文字列の中で番地はすべて半角文字から始まっていると仮定します。それと、番地までの市町村名他には半角文字が使われていないと仮定します。  それでいくと、住所の文字列の先頭から調べて、半角文字があれば、先頭から何バイト目にあるかを返します。  この数字を基に、先頭からこの数字の手前までなら「市町村名他」。この数字以降なら「番地」としてフィールドを分けることができます。  使うべき桐の関数は、#IS半角と#部分列だけですね。「桐」には文字列関数がたくさん揃っているので、ほとんど対話式で仕事を進められます。便利すぎて、いつまで経ってもAccessもVBAも覚えられないです。  たぶん、AccessやVBAでも可能なんだろうけど、ポイントは、半角文字を捜してその位置を返す関数ですね。  余計なお世話かもしれないけど、「桐」のURLを記します。90日以内ならタダで使えるようになっています。

参考URL:
http://www.k3-soft.com/kiri9/index.html
uzoozu
質問者

お礼

whitepepper さん ありがとうございました。「桐」をダウンロードして試用版を触ってみましたが、 慣れれば易そうですが、う~む、ちと時間がかかりそうです。 それでも、とてもよい参考になりました。もう少しがんばってみます。

  • telescope
  • ベストアンサー率54% (1069/1958)
回答No.3

すべてのデータが「○○町1-2-3」であるなら、 たとえば、A列に 府中市新町5-44-35 や 西東京市田無町12-6-7 なら、B列に =LEFT(A1,FIND("町",A1,1)) C列に =MID(A1,FIND("町",A1,1)+1,10) とすれば取り出せます。 「町」がつかない場合は、エラーになります(#VALUE!) たとえば、  多摩市落合8-35-7 また、市に「町」がつく場合、たとえば、 町田市森野8-28-14   町  田市森野8-28-14 のようになってしまいます。

uzoozu
質問者

お礼

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

noname#4564
noname#4564
回答No.2

残念ながら、完全に解決できる方法はないと思います。 一応、左から最初の数字の位置で切り出せば、らしい形が得られるとは思いますが、漢数字で番地を標記したデータが混在していた場合、お手上げです。 (全角の数字にも要注意ではありますが、こちらは漢数字とは違い、対応は可能です) まあ、それでも上手く工夫すれば手作業でデータを整理するよりは大幅に作業負担を軽減できるのは間違いないので、やってみる価値はあるかもしれません。(データの品質によりけりでしょうけれど) # Access や Excel より、正規表現の使用できるエディタ等を使用した方がよいかもしれません。 # (VBAでもできるとは思いますが、ちょっと面倒そうな気がする・・・)

uzoozu
質問者

お礼

nanashinogombei さん ありがとうございます。やはり完全には難しいですか。。。 地道に切り出しを繰り返して見たいと思います。

回答No.1

過去ログですが、ほぼ同じ質問ですので、参考になると思いますが・・・

参考URL:
http://www.okweb.ne.jp/kotaeru.php3?q=447179
uzoozu
質問者

補足

>akubihime212さん 早速のご回答ありがとうございました。 教えていただきましたログを見てみましたが、残念なことに「市区町村」と「番地」の双方のデータを活かしたいのです。また、件数がかなり多いので。。。 半角でも空白が入っていれば。。。と悔やんでいるのですが。。。

関連するQ&A