過去の桐井戸端BBS (桐ver.9)
27558 住所データを住所と番地で分割したい みみこ♪ 2004/09/04-11:48
住所データで
●●県●●●市●●●●123-456といったデータ(●や数字の数は行によって異なる)を住所1と番地で分割したいのですが、
どのような関数を設定していいのか、よく分かりません。
関数にお詳しい方、良かったら、是非アドバイスを下さい。宜しくお願い致します。
27559 Re:住所を分割したいのですが・・・。 juy 2004/09/04-15:57
記事番号27558へのコメント
たぶん、こんな感じでできます。

[住所1]の計算式
#s(#s(#s(#s(#s(#s(#s(#s(#s(#s(#s(#s(#半角([住所]),"1",""),"2",""),"3",""),"4",""),"5",""),"6",""),"7",""),"8",""),"9",""),"0",""),"-","")," ","")

[番地]の計算式
#s([住所],[住所1],"")


[住所1]で、番地部分が元からすべて半角であれば、#半角は不要です。
#文字置換(#s)で"0"〜"9"と"-"と半角の空白を "" に置換しています。

集合住宅などでアルファベットが入っていると(例:A-203)
さらに"A"〜"Z"も置換。

アパート・マンション名等がカタカナで入っていると
さらに半角カタカナを置換。

該当データが少なければ、手動で修正できますが・・・。


 すっきりとした方法があれば、私も教えてほしいと思っています。

27560 Re:住所を分割したいのですが・・・。 今村 誠 2004/09/04-18:01
記事番号27558へのコメント
みみこ♪さんこんにちは
>住所データで
>●●県●●●市●●●●123-456といったデータ(●や数字の数は行によって
>異なる)を住所1と番地で分割したいのですが、どのような関数を設定してい
>いのか、よく分かりません。

#cond(#is数字([住所],0)>0,#sstr([住所],1,#is数字([住所],0)-1),1,[住所])

番地以降は

#S([住所],#cond(#is数字([住所],0)>0,#sstr([住所],1,#is数字([住所],0)-1),1,[住所]),
"")

住所に1丁目や2丁目2街区3街区他にも似たような例がありますので
どこが番地なのかをアラビア数字だけで判断して良いかは疑問です。

入力時に番地より前の住所を漢数字一二三やローマ数字UVWで書く等の規則性を持たせると分離できると思います。
また建物などは空白スペースを入れるとか

27561 Re:住所を分割したいのですが・・・。 MK 2004/09/04-18:06
記事番号27558へのコメント
単純に数字を境に住所を分けるなら、
[住所1]と[番地]の項目を新たに作成し、項目置換で
[住所1]は#部分列([住所],1,#IS数字([住所],0)-1)
[番地]は#部分列([住所],#IS数字([住所],0))
上記の方法で一応は分割できると思います。
ただし、全てのデータに対して上手くいくわけではありません。
例えば、札幌市北区北六条西1−2−3という住所が
札幌市北区北6条西1−2−3と入力されていれば、
番地の項目には”6条西1−2−3”と置換されてしまいます。
この辺の処理をどうするかが問題になってくると思います。

27562 住所の町域名と番地の分割 佐田 守弘 2004/09/05-12:12
記事番号27558へのコメント
みみこ♪さん
まず先に結論的なことを言えば、住所の町域名(住所1と言っている部分)と
番地番号を分割する完全な方法は、他の方も書かれている通りありません。
その中でも比較的確率が高いのは、郵便番号データを使う方法ではないでしょうか。

●住所の分け方
住所の記述は細かく分ければ切りがないのですが、私は次の様に分割しています。
 都道府県名、町域名(市区町村名+町域名)、番地、建物名
住所ソフトによっては市区町村名とそれに続く大字名を分けるケースもありますが、
私は20年近くの経験で分ける必要なしと判断し、上記のようにしています。
一応、この前提でこの先の話を続けます。

●郵便番号データ
郵便局の郵便番号CSVデータを元に、上記の様な形の郵便番号データを作っておきます。
詳しくは、私のサイトの
 http://www.ne.jp/asahi/m.sada/kiri/KIRI7/K7_ZIP.html
 http://www.ne.jp/asahi/m.sada/kiri/KIRI7/K7_ZIP2.html
を参照して下さい。

●変換
まず都道府県名は郵便番号から確実に得られます。郵便番号データを使って、
#表引き関数で求められます。
(例) [都道府県]=#表引き([〒],=,"zip.tbl",[ZIP],[PREF])

同様に[町域] (市区町村名+町域名)も郵便番号からの表引きで求めます。
ただし、郵便番号の仕組みとそのデータの形から、完全ではありません。
地域によりますが、住所の記述を郵便番号表記載の文字で正しく行っていれば、
成功率は95〜98%程度だと思います。
実際には住所を正しく記述していないケースが多く、かなり確率が下がります。

都道府県名と町域名が求められたら、次の様にして、住所記述の中から
都道府県名と町域名を未定義値に置換すれば住所番号が求められます。
 #文字置換(#文字置換([住所],[都道府県],""),[町域],"")

■以下は余談です。
市区町村名は、行政区の名称でしょう。つまり、市役所、区役所、町役場、
村役場があり、その長である市長、区長、町長、村長がいる自治体名称です。
その下に続くのが大字、字、子字名です。□□市○○(町)の「○○(町)」の部分ですが、
「町」とついてもここには町長さんはいません。
(町会長さんはいるでしょうが。)

・「丁目」について
例えば管理工学研究所がある西麻布は、「東京都港区西麻布3-3-1」と表記されていますが、
正しく表記すると「港区西麻布三丁目三番一号」です。
西麻布三丁目は、「西麻布の3番目の丁目」の様に思っている方も多いと思いますが、
これは全くの誤りです。
港区にあるのは「西麻布三丁目」という町なのであって、西麻布という町(字)はありません。
つまり西麻布三丁目までが1つの字か大字です。
従って、「東京都港区西麻布3-3-1」という記述は元来は間違いなのです。

・町域とは
上記でも町域名なる言葉を使いましたが、この用語は新郵便番号制度で
作られた言葉の様です。本来は「西麻布三丁目」と記述すべき町名を、
数字になるところは数字に置き換えて、数字の前の部分までの文字を
取り出したものが町域名です。
ただし、地域によっては、「丁目」別に町域としたり、高層ビルの様に
同じビルでも階層毎に別の町域にする場合もあります。
どの様に町域に分けたのかといったルールは明確ではなく、「郵便配達が
やりやすい単位で分けた」が正解の様なのですが。

・「一番町」と「1番町」
これは書き誤りではなくて、町によって記述が異なります。郵便番号データ見ると、
両方のケースがあります。一番町」と書くべき所を「1番町」と書けば誤りになります。

佐田守弘(KS-00119)
27566 Re:住所を分割したいのですが・・・。 よーく 2004/09/05-21:55
記事番号27558へのコメント
はじめまして。
mkさんと似ていますが、自分の指定したいところで分けるなら、

(元のデータ項目[住所]とします。)

[住所1]と[番地]の項目を新たに作成し
[住所1]の値と[番地]の値の間に半角スペースを入力して

 項目名:[住所1]
 計算式:#部分列([住所],1,#文字位置([住所]," ")-1)
 項目名:[番地]
 計算式:#部分列([住所],#文字位置([住所]," ")+1)

また置換するのでしたら[番地]項目のみつくって
[B]-[項目置換]-[置換条件] の
条件1に 項目名:[番地]
     計算式:#部分列([住所],#文字位置([住所]," ")+1)
条件2に 項目名:[住所]
     計算式:#部分列([住所],1,#文字位置([住所]," ")-1)

で置換してみてはいかがでしょう。

戻る