10/22/2017

Access。クエリで氏名から苗字と名前を抽出する。Excelと少しやり方が違うのです。【Left関数&Right関数】

Access。クエリで氏名から苗字と名前を抽出する。Excelと少しやり方が違うのです。

<クエリ Left関数&Right関数>

ExcelのLEFTとRIGHTとLENとFIND関数を使って、
氏名から苗字と名前を抽出する方法と言うのは、
お馴染みなのですが、これと同じ事をAccessのクエリでやってみましょう。

次のクエリがあります。まだ、氏名フィールドだけです。

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

氏名フィールドのデータは、苗字と名前の間に、
半角スペースが挿入されています。

この点は、AccessでもExcelでも同じですね。

分割されているポイントがわからないと、判断出来ませんからね。

最初は、苗字フィールドを作っていきます。

Excelでは、半角スペースを見つけるのに、
FIND関数を使いますが、

Accessでは、InStr(インストリング)関数というのがありまして、
この関数を使っていきます。

InStr関数は、文字列の中の文字を検索して、文字位置を返す関数です。

苗字: Left([顧客名],InStr([顧客名]," ")-1)

このように新しく苗字フィールドを作成してみましょう。

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

このように、苗字を抽出することができましたね。

苗字: Left([顧客名],InStr([顧客名]," ")-1)
を説明しておきましょう。

顧客名フィールドの半角スペースがある文字位置をInStr関数で見つけます。
内藤 美里さんのば場合は、3文字目に半角スペースがあります。

このままLeft関数を使って左からの文字数を3文字分で抽出すると、
半角スペースも含めて抽出してしまうので、
-1して、左から2文字分を抽出するようにしています。
左からの文字を抽出するのが、Left関数でしたね。

続いて名前フィールドを作成していきます。
Excelでは、このような数式を作って抽出することが多いと思います。

=RIGHT(B2,LEN(B2)-FIND(“ “,B2,1))

半角スペースを見つけて、
その文字数を数えて、全体の文字数から半角スペースまでの
文字数を除算した数値を使って、
右側から除算した数値分を抽出するというやり方ですよね。

しかし、Accessでは、次のように名前フィールドを作ります。

名前: Mid([顧客名],InStr([顧客名]," ")+1)

このように新しく名前フィールドを作成してみましょう。

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

このように、氏名を抽出することができましたね。

名前: Mid([顧客名],InStr([顧客名]," ")+1)

Excelと全く異なっていますよね。

そもそも、右側からという考えがない。
Right関数がAccessに無いわけではありません。
使うと面倒だから使わないのです。

説明すると、
Mid関数は、Mid(文字列,開始位置,文字数)という引数で構成されています。

文字列があって、その中の開始位置を指示して、
そこから指示されている文字数を抽出する関数なのは、
Excelと同じなのですが、
AccessのMid関数は、引数の「文字数」を省略すると、
なんと!指定した位置以降のすべての文字列を抽出することが出来るのです。

つまり、
半角スペース以降が2文字でも、4文字でも、かまわないので、
右から何文字という情報を必要としないのです。

なので、Right関数を使わないで、
Mid+InStr関数で抽出することが出来ちゃうのです。

最後の+1は、半角スペースの文字位置を求めていますので、
そのままだと、半角スペースの位置以降ということになり、
半角スペースも抽出されてしまうので、+1して名前だけを抽出しています。

ExcelとAccessで似ているようで、少し違う方法の一例ですので、
Excelだけ知っていても、Accessではそうでないケースもありますので、
ExcelもAccessも両方とも使いこなせるようになるといいですね。