Access。クエリ。住所から都道府県を抽出するにはどうしたらいい
<Access>
住所フィールドには、都道府県名から建物名まで入力されているデータなので、都道府県をそのデータから抽出したい場合、Accessでは、どのようにしたらいいのでしょうか。
Excelの場合は、IF関数をつかってもいいのですが、次の方法でも、住所から都道府県名を抽出することができます。
C列には住所が入力されています。D列に都道府県を抽出したので、D2に数式を設定します。
=LEFT(C2,(MID(C2,4,1)="県")+3)
数式を設定後、オートフィルで数式をコピーします。
これで、都道府県を抽出することができます。
そもそも、なんでこんな数式をつくらないといけないのかというと、4文字目県問題があるからです。
4文字目県問題とは、神奈川県・和歌山県・鹿児島県のことを指します。
この3件だけ、県が左から4文字目にあります。
ほかの県や北海道・東京都・大阪府・京都府はすべて左から3文字目が区切り位置になっています。
そのため、4文字目が県かどうかの判断が必要だというわけです。
この数式のポイントは、
MID(C2,4,1)="県"
左から4文字目が県だったら、TRUE。
そうでなければ、FALSEを返します。
ExcelではTRUEを1、FALSEを0と定義しています。
4文字目が県ならば1 その値に+3すれば4になります。
そして、LEFT関数をつかうことで、左から4文字目までを抽出するという数式をつくることができます。
これで、都道府県を抽出することができるわけですが、Accessではどのようにしたらいいのでしょうか。
AccessにはIIF関数が用意されていますが、今回紹介したLEFT+MID関数の組み合わせと同じようできるといいのですが。
Accessでの確認をしておきます。
T_都道府県というテーブルの住所フィールドから都道府県を抽出するクエリをつくります。
クエリデザインをつかいます。
Excelと同じ数式を演算フィールドでつくってみました。
都道府県: Left([住所],(Mid([住所],4,1)="県")+3)
実行してみます。
残念ながら、うまく抽出できません。
神奈川県が「神奈」というように、左から4文字目どころか2文字目までで抽出されていることがわかります。
なんでこのようになったのかを確認するために、引数内のMid関数だけの演算フィールドをつくって確認してみます。
Mid関数確認: (Mid([住所],4,1)="県")
実行してみます。
AccessではTRUEを「-1」と定義されているので、左から2文字目までしか抽出してくれなかったわけです。
ならば、「+1」となるように演算フィールドを修正すればいいわけです。
都道府県: Left([住所],((Mid([住所],4,1)="県")*-1)+3)
「-1」を「1」にしたいだけなので「*-1」とマイナス1をかけてあげればいいわけです。
では、実行してみましょう。
これで、住所フィールドから都道府県名を抽出することができました。






![都道府県: Left([住所],((Mid([住所],4,1)="県")*-1)+3) 都道府県: Left([住所],((Mid([住所],4,1)="県")*-1)+3)](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhzyi3zSoqLPleRh_uV3XXAMWm7wXff3SdxqHRitZizgvH__9U7Y3R6riztZYJ2iZCXEjz3pS7hyphenhyphenWdgFx_G3SPyOOp-sjt4ma3qNDW3Vk53Kja5Mt0kvUEwK9Ml0g6jjeXNjCQ5PKmYr-Wm2_OpwNpux7cXJbg-HhVAIRSYcB_2UohI3fxxK82u-4LbAG4/w400-h226/008.jpg)
