12/18/2017

Access。クエリで住所を都道府県とそれ以降に分割するには【Address】

Access。クエリで住所を都道府県とそれ以降に分割するには

<都道府県分割>

Accessで住所録などを作るときには、
都道府県や市区町村をそれぞれフィールドにわけてテーブルをつくるほうが、
あとでの管理や運営からみて、使い勝手がよくなるし、

テーブル作成からはじめた場合は、住所入力支援ウィザードをつかうことで、
郵便番号を入力するだけで、都道府県や市区町村をそれぞれフィールドにわけて、
住所入力も、容易になるのですが、

すでに、一つのフィールドに、都道府県も含めて住所が入っていた場合、
どうやって分割したらいいのでしょうか?

基本的には、Excelで処理する場合と同じで、
47都道府県のうち、神奈川県・和歌山県・鹿児島県の3県だけが
4文字目に"県"がありますので、
左から4文字目が【県】なのかどうかを判断させるようにすれば、
分割抽出できるというわけです。

【都道府県を抽出】

では、次のテーブルがあります。

このT珈琲販売店一覧の住所フィールドを
都道府県とそれ以降にわけるクエリを作成していきます。

作成タブのクエリデザインを使って、フィールドを設定していきます。

フィールドに、店舗IDと販売店名と住所を設定してみると、次のようになります。

この住所フィールドのとなりに、都道府県フィールドを追加してみましょう。

データシートビューで確認してみましょう。

都道府県を抽出するが出来ましたね。

では、都道府県フィールドの説明です。
都道府県: IIf(Mid([住所],4,1)="県",Left([住所],4),Left([住所],3))

IIfは、ExcelのIF関数と同じですので、Mid([住所],4,1)="県"。
つまり、住所フィールドの4文字目の1文字は「県」ですか?という論理式です。

そして、真の場合が、Left([住所],4)。4文字目が「県」だったら、
住所フィールドの左から4文字を抽出。
偽の場合が、Left([住所],3)。そうじゃなければ、
住所フィールドの左から3文字を抽出するという意味になります。

考え方も作り方もExcelと同じですね。


【都道府県以降を抽出】

都道府県を抽出できましたので、今後は、それ以降を抽出していきましょう。

デザインビューに戻して、住所フィールドが存在しているので、
住所1フィールドを都道府県以降として作っていきます。

住所1: IIf(Mid([住所],4,1)="県",Mid([住所],5),Mid([住所],4))

基本的な考え方は、先程の都道府県と同じで、
住所フィールドの4文字目が「県」かどうかを確認するために、IIf関数を使います。
そして、真の場合。
つまり「県」だったら、Mid([住所],5)。
住所フィールドの5文字目以降を抽出して、

偽の場合だったら、Mid([住所],4)。
住所フィールドの4文字目以降を抽出するという処理をさせています。

AccessのMid関数は、
Mid(文字列,開始位置,文字数)という引数をもっていて、
文字数を省略すると、開始位置以降の文字全部を抽出することが出来ます。

AccessのMid関数はExcelのMid関数よりも使い勝手がいいように感じますね。

では、データシートビューで確認してみましょう。

このように処理する事で、
都道府県とそれ以降に分割抽出することが出来ましたね。

とはいえ、最初から分割しておくといいのは、間違いないところですかね。