過去の桐井戸端BBS (桐ver.8)
13179 住所のデータから番地だけを部分的に取り出したい ほん 2001/09/25-15:40
いつも親切なお返事ありがとうございます。

データ上

****市****町111-25

が1項目で入っている
といったデータがあるとき 111-25 だけを
別項目に取り出す 置換式等はありますでしょうか?

よろしくお願いいたします。
13180 Re:部分的に取り出す 今村 誠 2001/09/25-16:35
記事番号13179へのコメント
ほんさんこんにちは、#住所表示番号 が一番簡単に取り出せます。

でも桐ver8sp5あるいは6から(どちら定かではありません)の新関数ですので、
バージョンアップしていない方は使用できません。
ご質問の時には、なるべく今ご使用のバージョン番号とsp番号をご記入下さい。

蛇足までに、この掲示板のトップページに管理者の幅田さんのCD書籍の案内がありますが、
このCDのなかに、sp6にバージョンアップするための、ファイルも入っています。


13184 Re:部分的に取り出す 小松亀一 2001/09/26-02:41
記事番号13180へのコメント
今村 誠さん、おはようございます。

>ほんさんこんにちは、#住所表示番号が一番簡単に取り出せます。
>でも桐ver8sp6からの新関数です。
私もこのような関数があればと思っていました。あるんですね。
ご教示有り難うございました。

ヘルプで調べると以下の通りでした。

#住所表示番号
住所の中から、新郵便番号用のバーコードデータを抜き出します。
この関数は、新郵便番号のカスタマーバーコードを印刷するときに使用します。
サンプル
「札幌市中央区南四条西29-1524-23 郵便ハウス501」から、バーコードデータ
を抜き出します。
#住所表示番号( "064-0804" + "札幌市中央区南四条西29-1524-23 郵便ハウス501" )
→ 064080429-1524-23-501
[郵便番号]と[住所]から、新郵便番号バーコードデータを生成します。
#住所表示番号( [郵便番号] + [住所] )

早速、使用して便利さを実感しました。
ところで、[住所]データの
"仙台市青葉区中央3-1-21富士ビル5F"
から"富士ビル5F"だけを取り出す方法をご教示頂ければ幸いです。

#住所表示番号([住所])では、"3-1-21-5"となります。
実は、各種ファイルの[住所]を[町域],[番地],[建物]に分ける作業をしております。

13193 Re:部分的に取り出す 今村 誠 2001/09/26-14:42
記事番号13184へのコメント
小松亀一さんこんにちは
>"仙台市青葉区中央3-1-21富士ビル5F"
>から"富士ビル5F"だけを取り出す方法をご教示頂ければ幸いです。
>
>#住所表示番号([住所])では、"3-1-21-5"となります。
>実は、各種ファイルの[住所]を[町域],[番地],[建物]に分ける作業をして
>おります。

県と市は簡単に分解できますが、町域は、北海道や京都では郵便番号簿の不備により不可能と思います。
方法的には、住所表示の関数を使い、最初の数字と、住所を置換で数字変換して
半角変換して文字位置関数でその一致した位置を番地との区切りにすると求められると思います。

下準備として、住所を県と市とその他に分けます。
下記に、市以下を求める式を記載します。

#S(#S(#S(#S(#S(#S(#S(#S(#COND(#文字位置([読依頼],"県")>2 .AND #文字位置([読依頼],"県")
<5,#S([読依頼],#SSTR([読依頼],1,#文字位置([読依頼],"県")),""),(#文字位置([読依頼],"大阪府")
>0.1 .OR #文字位置([読依頼],"京都府")>0.1) .OR (#文字位置([読依頼],"北海道")>0.1 .OR
#文字位置([読依頼],"東京都")>0.1),#S([読依頼],#SSTR([読依頼],1,3),""),1,[読依頼]),"市大字","市")
,"町大字","町"),"村大字","村"),"区大字","区"),"区字","区"),"市字","市"),"町字","町"),"村字","村")

この項目に、#住所表示番号で#文字位置を使用すれば番地以下がわかるので
その番地以下の項目で、#条件選択で数値の終わりか番地の次の文字で分けるのが
分けられると思います。

ps[読依頼]は[住所]に変更のこと
13196 Re:部分的に取り出す 今村 誠 2001/09/27-09:58
記事番号13193へのコメント
小松さんおはようございます。
いろいろテストしてみましたが、元住所に郵便番号があると町域は郵便番号簿から
表引きで持ってくれば、できそうですが、小字もあるので、どこまでを町域にするのかよくわかりません。
また、番地が書いてあるのと無いのがあるので、計算式で建物との区切りは、難しいと思います。
元住所に100%番地が書いてあって、その番地が算用数字であれば分離可能と思います。
漢数字(一丁目)だったり、番地のない建物は、区切りようがありません。
文字位置関数でも、誤字脱字(ケとヶの違いなど)があると判断できませんので、郵便番号簿との比較ができません。
残念ですが、お役に立てそうにありません。



13197 Re:部分的に取り出す 小松亀一 2001/09/27-13:31
記事番号13196へのコメント
今村 誠さん,お世話様です。
色々ご検討有り難うございます。

>いろいろテストしてみましたが、元住所に郵便番号があると町域は郵便番号簿から
>表引きで持ってくれば、できそうですが、小字もあるので、どこまでを町域に
>するのかよくわかりません。
>また、番地が書いてあるのと無いのがあるので、計算式で建物との区切りは、
>難しいと思います。
>元住所に100%番地が書いてあって、その番地が算用数字であれば分離可能と思います。

元住所は全て次のように町域の後の番地は全て半角数字と半角ハイフンになっています。
入力時に全てこのルールで入力しており、番地の無い住所もありません。
"仙台市青葉区中央3-1-21富士ビル5F"

そこで半角数字最後の文字の後のデータだけを取り出すとの関数設定が出来れば問題は解決するのですが、
私のレベルでは、その関数の設定が出来ません。
#住所表示番号と#文字位置をどのように使えば実現できるかご教示頂ければ幸いです。
13199 Re:部分的に取り出す 小松亀一 2001/09/27-14:21
記事番号13197へのコメント
補足です。

>"仙台市青葉区中央3-1-21富士ビル5F"
>
>そこで半角数字最後の文字の後のデータだけを取り出すとの関数設定が出来れば問題は
>解決するのですが、
      ↑
"階"は、"F"と、"105号"は、"105"記載しておりました。
半角数字の後に、全角文字が来る場合の、全角文字以下全部をとりだすとの関数設定が必要のようです。
13203 Re:部分的に取り出す うにん 2001/09/27-15:11
記事番号13197へのコメント
小松亀一さん

>元住所は全て次のように町域の後の番地は全て半角数字と半角ハイフンになっています。
>入力時に全てこのルールで入力しており、番地の無い住所もありません。
>"仙台市青葉区中央3-1-21富士ビル5F"
>
>そこで半角数字最後の文字の後のデータだけを取り出すとの関数設定が出来れば問題は
>解決するのですが、私のレベルでは、その関数の設定が出来ません。
>#住所表示番号と#文字位置をどのように使えば実現できるかご教示頂ければ幸いです。

番地以降を取り出せるという話ですので、"3-1-21富士ビル5F"という部分が[a]だとして
これからビル名を取り出すには、全角文字の先頭を探せばいいでしょう。
#条件選択(#IS全角([a],0),#部分列([a],#IS全角([a],0)))

13205 Re:部分的に取り出す 小松亀一 2001/09/27-16:53
記事番号13203へのコメント
うにんさん,こんにちは。
ご指導ありがとうございます。

>番地以降を取り出せるという話ですので、"3-1-21富士ビル5F"という部分が[a]だとして
>これからビル名を取り出すには、全角文字の先頭を探せばいいでしょう。
>#条件選択(#IS全角([a],0),#部分列([a],#IS全角([a],0)))

実は、[住所]の"仙台市青葉区中央3-1-21富士ビル5F"から#住所表示番号を利用して、
"3-1-21-5"は取り出すことが出来るようになりましたが、"3-1-21富士ビル5F"を取り出すまでは出来ていませんでした。

そこで、残念ながら"3-1-21富士ビル5F"という部分が[a]とは出来ていません。

しかしまだ不勉強で、関数#IS全角は、全然勉強しておりませんでした。
これを機会に勉強してその利用方法を探ってみます。

ありがとうございました。
13209 Re:部分的に取り出す 【多遊】 2001/09/27-18:08
記事番号13205へのコメント
小松さん>こんにちは。
少し気になるのですが、
>>番地以降を取り出せるという話ですので、"3-1-21富士ビル5F"という部分が[a]だとして
は、例題としていいのですが、

例題以外に「3-1-21」の次に来る文字は必ず全角と決まってますか?
また、「3-1-21」は、3丁目2番地1号とか初めての数字の後ろに、取り出したい内容以外は、入ってませんか?

また、全然別の方法ですが、取り出したいビル名等の前にスペースを置くとかして
区切りをつけるのもいいかと思います。
(作業は、いったんテキスト書き出し後、エデイタでもかまいませんよ)

13216 Re:部分的に取り出す 今村 誠 2001/09/27-23:11
記事番号13205へのコメント
小松亀一さんこんにちは遅くなりましたが、町域と番地の分離までの計算式を書いてみます。
あとは「うにん」さんのコメントの通りでうまくいくと思います。

[計算県無住所]です
#S(#S(#S(#S(#S(#S(#S(#S(#COND((#文字位置([読込住所],"大阪府")>0.1 .OR #文字位置([読込住所],"京都府")
>0.1) .OR (#文字位置([読込住所],"北海道")>0.1 .OR #文字位置([読込住所],"東京都")>0.1),#SSTR([読込住所],4)
,((#文字位置([読込住所],"県")>2 .AND #文字位置([読込住所],"県")<5) .and #文字位置([読込住所],"市")
>3) .not (#文字位置([読込住所],"諸県")>1 .and #文字位置([読込住所],"諸県")<3),#SSTR([読込住所],
#文字位置([読込住所],"県")+1),1,[読込住所]),"市大字","市"),"町大字","町"),"村大字","村"),"区大字","区")
,"区字","区"),"市字","市"),"町字","町"),"村字","村")[住所表示番号]です
#SSTR(#s(#住所表示番号([計算県無住所]),"-",","),1,#IS英字(#s(#住所表示番号([計算県無住所]),"-",","),0)-1)
+","+#SSTR(#s(#住所表示番号([計算県無住所]),"-",","),#IS英字(#s(#住所表示番号([計算県無住所]),"-",","),0))

[計算町村コード]です
#PROGN(#SETQ(&M0,#TLU(#SSTR([計算県無住所],1,10),=,&tel,[県無し],[町村コード])),#SETQ(&処理,#TLU(#SSTR
([計算県無住所],1,9),=,&tel,[県無し],[町村コード])),#SETQ(&枝番,#TLU(#SSTR([計算県無住所],1,8),=,
&tel,[県無し],[町村コード])),#SETQ(&X2,#TLU(#SSTR([計算県無住所],1,7),=,&tel,[県無し],[町村コード])),#SETQ
(&M1,#TLU(#SSTR([計算県無住所],1,6),=,&tel,[県無し],[町村コード])),#SETQ(&M5,#TLU(#SSTR([計算県無住所],1,5),
=,&tel,[県無し],[町村コード])),#SETQ(&M4,#TLU(#SSTR([計算県無住所],1,4),=,&tel,[県無し],[町村コード])),
#SETQ(&M3,#TLU(#SSTR([計算県無住所],1,3),=,&tel,[県無し],[町村コード])),
#SETQ(&M2,#TLU(#SSTR([計算県無住所],1,2),=,&tel,[県無し],[町村コード])),
#COND(&M0<>#U,&M0,&処理<>#U,&処理,&枝番<>#U,&枝番,&X2<>#U,&X2,&M1<>#U,&M1,&M5<>#U,&M5,&M4<>#U,&M4,&M3<>#U,&M3,&M2<>#U,&M2,1,""))

[計算市]です
#cond([計算町村コード]>0.5,#tlu([計算町村コード],=,"C:\K3\Data\郵便番号\電話.tbl",[町村コード],[住所],"町村コード",1),1,"")

[計算県]です
#COND(#文字位置(#sstr([計算市],1,4),"県")>2,#SSTR([計算市],1,#文字位置([計算市],"県")),1,#SSTR([計算市],1,3))
つづきます
13218 Re:部分的に取り出す 今村 誠 2001/09/27-23:24
記事番号13216へのコメント
[計算住所1]です
#半角(#SSTR([計算県無住所],#L([計算市])-#L([計算県])+1))

[町域]です
#SSTR([計算住所1],1,#COND(#文字位置([計算住所1],#対応文字列([住所表示番号],1))>1,#文字位置([計算住所1],#対応文字列([住所表示番号],1))-1
,#文字位置([計算住所1],#対応文字列([住所表示番号],2))>1,#文字位置([計算住所1],#対応文字列([住所表示番号],2))-1,
#文字位置([計算住所1],#対応文字列([住所表示番号],3))>1,#文字位置([計算住所1],#対応文字列([住所表示番号],3))-1,1,1))

[番地]です
#SSTR([計算住所1],#COND(#文字位置([計算住所1],#対応文字列([住所表示番号],1))>1,#文字位置([計算住所1],
#対応文字列([住所表示番号],1)),#文字位置([計算住所1],#対応文字列([住所表示番号],2))>1,#文字位置([計算住所1],
#対応文字列([住所表示番号],2)),#文字位置([計算住所1],#対応文字列([住所表示番号],3))>1,#文字位置([計算住所1],
#対応文字列([住所表示番号],3)),1,1))

市区町村コードか郵便番号があればある程度の項目は省けます。
表引きの計算式は、電話番号簿から県だけを省いた住所でしています。
府中市は2つあるので計算で間違います。

【多遊】さんも書いていらっしゃいますが、丁目や番地があると無駄な計算式となります。
文字はすべて半角、算用数字との前提でないと、建物の分離は不可能です。
役に立たないとは思いながらも、投稿しました。

13219 Re:部分的に取り出す 【多遊】 2001/09/27-23:46
記事番号13209へのコメント
おまけです。
>元住所は全て次のように町域の後の番地は全て半角数字と半角ハイフンになっています。
>入力時に全てこのルールで入力しており、番地の無い住所もありません。
上記ルールの場合
「下立売上る2丁目西入」のような、住所は、どのように入力されてるのかな?と思いましたので。
当然、ビル名やマンション名は、その後に続くわけですね。

13222 Re:部分的に取り出す 小松亀一 2001/09/28-04:46
記事番号13219へのコメント
【多遊】さん、おはようございます。おひさしぶりです。
色々ご指導有り難うございます。

>>元住所は全て次のように町域の後の番地は全て半角数字と半角ハイフンになっています。
>>入力時に全てこのルールで入力しており、番地の無い住所もありません。
>上記ルールの場合
>「下立売上る2丁目西入」のような、住所は、どのように入力されてるのかな?と
>思いましたので。

実は宮城県内のサラ金業者を中心とした1500社程の金融機関一覧表を作っており、
当初、住所は一項目だったものを、佐田先生のアドバイスで、県、町域、番地、建物
の四項目に分けることにしてその作業をしております。
この方がオーガナイザー等との住所録との連携もしやすくなりますので。

宮城県では、「下立売上る2丁目西入」のような住所はありませんでした。
徐々に全国のサラ金業者も加えていきますので、このような住所も出てくるでしょうね。
この場合は、

「下立売上る2丁目西入」までを町域として、「下立売上る二丁目西入」と表示しようかと思っております。

13223 Re:部分的に取り出す 小松亀一 2001/09/28-04:54
記事番号13216へのコメント
今村 誠さん、おはようございます。

>[計算県無住所]です
>[計算町村コード]です
>[計算市]です
>[計算県]です
>[計算住所1]です
>[番地]です


膨大な計算式に圧倒されております。

如何に今村さんと言えこれだけの計算式をお作りになるのに相当骨が折れたと思います。
心より感謝申し上げます。

私のレベルでは容易に理解できない計算式ですが、私なりにその意味を解釈して、
使わせて頂きたいと思っております。
じっくり時間をかけて検討した上で、質問等致しますので宜しくお願い申し上げます。

有り難うございました。

13235 Re:部分的に取り出す 今村 誠 2001/09/28-14:38
記事番号13222へのコメント
小松亀一さんこんにちは
>「下立売上る2丁目西入」までを町域として、「下立売上る二丁目西入」と表示しようかと
>思っております。

あの計算式は完璧ではないのですが、上の例は大変重要な意味があります。
#住所表示番号は、漢数字に関係なく丁目の前の文字を数値に変えます。
わたしの式で、条件判断するところがありますが、最初の数値が、番地とはならないのです。
町域は小松さんのように漢数字にして、丁目や街区を指定してそのあとが番地であれば区切りとしてはいいと思いますが、
計算式では、もう一工夫しないと、最初の数値が後ろの番地に含まれていた場合計算間違いします。
条件判断だけの問題ですので、小松さんが .andや.orや.notを組み合わせて
小松さんの思う番地の始まりと、計算式を一致させてください。

町域と番地を計算住所1から分ける処理の計算式です。

13254 Re:部分的に取り出す 小松亀一 2001/09/29-06:22
記事番号13235へのコメント
今村 誠さん、おはようございます。

>あの計算式は完璧ではないのですが、上の例は大変重要な意味があります。
>#住所表示番号は、漢数字に関係なく丁目の前の文字を数値に変えます。
>わたしの式で、条件判断するところがありますが、最初の数値が、番地とはならないのです。
>町域は小松さんのように漢数字にして、丁目や街区を指定してそのあとが番地であれば
>区切りとしてはいいと思いますが、計算式では、もう一工夫しないと、最初の数値が
>後ろの番地に含まれていた場合計算間違いします。
>条件判断だけの問題ですので、小松さんが .andや.orや.notを組み合わせて小松さんの
>思う番地の始まりと、計算式を一致させてください。

重ねてご丁寧なレス有り難うございます。
正直のところあの膨大な計算式の内容をまだ理解できていませんが、少しずつでも何とか読解していきたいと思っております。

それにしても桐の関数の奥深さを思い知らされ、大変勉強になりました。
13439 Re:部分的に取り出す 今村 誠 2001/10/11-10:49
記事番号13223へのコメント
小松亀一さんこんにちは

>"仙台市青葉区中央3-1-21富士ビル5F"

単純に"富士ビル5F"だけを取り出すときは、手作業でするより以下の計算式が速いと思います。
番地が必ず半角で、元住所の項目名を[J]とすれば

仙台市青葉区の計算式

#SSTR([J],1,#IS半角([J],0)-1)
3-1-21富士ビル5Fは
#SSTR([J],#IS半角([J],0))
富士ビル5Fは
#SSTR(#SSTR([J],#IS半角([J],0)),#IS全角(#SSTR([J],#IS半角([J],0)),0))

仙台市を取り出すときは
#SSTR([J],1,#文字位置([J],"市")

市や郡や町を条件選択でするのは大変で、全国郵便番号の市だけから表引きして文字数の計算で引き算したほうが、
市と町域と番地は分離しやすいと思います。

戻る