12/21/2024

Access。氏名を姓と名に分割したいけど、どうしたらいいの【Split】

Access。氏名を姓と名に分割したいけど、どうしたらいいの

<Access>

氏名フィールドに、フルネームで氏名が入力されています。


この氏名フィールドから、姓フィールドと名フィールドにデータをわけたいのですが、どのようにしたらいいのでしょうか。

氏名を姓と名に分割したい

考え方として、空白の前が姓で空白の後が名ですから、空白を見つけてあげる必要があります。


Excelですと、FIND関数という空白の文字を見つける関数があるのですが、AccessにはFIND関数はありません。


その代わりになるのが、InStr関数です。


InStr関数をつかって、空白を文字内から見つけることができれば、分割することは可能です。


では、早速クエリをつくっていくことにします。

作成タブのクエリデザインをつかってつくっていきます。


最初の、姓には、次の演算フィールドで対応しました。

姓: Left([氏名],InStr(1,[氏名]," ")-1)


この演算フィールドで使用されている関数は、

Left関数。


文字列の左側から指定の文字数を抽出する関数です。


Excelでもお馴染みですね。

Left関数の引数ですが、最初の引数は、文字列なので、氏名フィールドです。


2つ目の引数が、文字数です。文字数は、空白の前までです。


ExcelだとFIND関数をつかうのですが、Accessでは、InStr関数をつかって、空白を見つけます。


InStr(1,[氏名]," ")


「" "」と半角空白にしていますが、これで全角空白にも対応することができます。


InStr関数の最初の引数は、省略可能ですが、開始位置です。


最後に「-1」しているのは、見つけた空白の位置よりも一文字少ないのが姓だからです。


つづいて、名ですが、

Replace関数を使う方法もありますが、今回は、Right関数という右側から指定の文字数分を抽出するようにします。


名: Right([氏名],Len([氏名])-Len([姓])-1)


Right関数の最初の引数は、文字列なので、氏名フィールドを設定します。


2つ目の引数は、右端からの文字数です。

この右端からの文字数を求めるのに、全体の文字数を求める必要があります。


全体の文字列数を求めるには、Len関数を使います。


そして、空白を見つけてもいいのですが、すでに、姓を見つけていますので、その文字数を減算し、さらに空白文字分の「-1」を追加した数式、


名: Right([氏名],Len([氏名])-Len([姓])-1)


とすることで、名を抽出することができます。


では、実行してみましょう。


姓と名に分割することができました。


1件目は、半角の空白、2件目は、全角の空白で区切られていますが、半角・全角に関わらず、分割されています。


ただし、空白が無い3件目のデータは、空白が見つけられないので、エラーがでます。


空白が無い場合という判断も、データによっては必要になります。