住所から番地以下を抽出する

 文字列として記録されている住所から、番地以下を取り出します。また、番地より前の文字列についても併せて抽出します。つまり住所を番地より前と番地以下に分割します。
 なお、番地は半角もしくは全角のアラビア数字(1,2,3…)で記録されているものとします。つまりここで行う「番地以下を抽出する」というのは「文字列中の最初に現れるアラビア数字とそれ以降の文字列を取り出す」ことであり、番地の抽出というのはその一つの実例に過ぎません。
 もしも、字(あざ)名などにアラビア数字が含まれているとしたら、そこから抽出されることとなります。

f:id:accs2014:20170701222815p:plain:right:w600

 例として右のようなテーブルを用います。
 「住所」列から番地以下を取り出します。


f:id:accs2014:20170701222811p:plain:right:w600

 クエリデザインです。次のような3つの列を設けます。



数字のみ: Eval(Replace(Replace(Format(StrConv([住所],8),Replace(String(Len(StrConv([住所],8)),"&"),"&","{&}")),"{","Choose(Asc('"),"}","')-47,0,1,2,3,4,5,6,7,8,9)&") & "''")

番地より前: Left([住所],InStr([住所],Left([数字のみ],1))-1)

番地以下: Mid([住所],Len([番地より前])+1)

 「数字のみ」列により「住所」中に含まれる数字をすべて取り出し、そのうち最初に現れる数字の位置を特定することにより、住所から番地以下を抽出しています。
 この「数字のみ」列が抽出実現のキモとなります。下記の記事でも紹介していますので併せてご覧ください(使用している式の内容が若干違いますが、得られる結果は同じです)。

www.accessdbstudy.net


f:id:accs2014:20170701222807p:plain:right:w600

 データシートビューです。
 狙い通りに抽出できているのがわかります。