Split関数で、氏名を分割

こんにちは。伊川(@naonaoke)です。

今回は、Split関数で、名前を、姓と名に変換します。

この氏名の分解は、実務でよく使います。



通常の関数の利用方法は、上の記事で説明しています。

是非、参考にしてください。


スポンサーリンク

今回のお題

「伊川 直助」を「伊川」と「直助」に分解します。

Split関数は、特定の文字で区切られた文字(スペースを含む)を配列に格納します。

この時の問題点が、姓と名の間の空白が、全角のスペースなのか、半角のスペースなのかという問題があります。

この点も考慮して、ユーザー定義関数を作成しなければなりません。

今回の必要な知識
  • Split関数
  • Nz関数
  • ユーザー定義関数
  • UBound
  • vbTextCompare

上記の関数を使ってACCESSのクエリに表現したいと思います。

クエリ


クエリは、ACCESSの中で、本当に重要なものです。

クエリのカンタンな説明は、上の記事で紹介しています。

クエリは、テーブルに入力されたデータを変幻自在に変換します。

クエリを制する者は、ACCESS、いや、データベースを制します。

氏名分割 作業手順 その1 データベースを確認


上のデータベースの氏名を分割します。

伊川三郎に関しては、分割することができません。

理由は、スペースで区切られていないからです。

氏名分割 作業手順 その2 
vbTextCompare

vbBinaryCompare (既定)は、「大文字と小文字」、「半角と全角」、「ひらがなとカタカナ」を区別します。

vbTextCompareは、何も区別しません。

なぜ、vbTextCompareを利用するのかというと、全角のスペースと、半角のスペースを区別しないためです。

氏名分割 作業手順 その3 ユーザー定義関数を作成

Function nameHenkan(str As Variant, n As Long) As String

(str As Variant, n As Long)

これが、namaHenkanの関数の中身 です。

str As Variant

今回のポイントは、変数を、あえてVariant型にしています。

本来は、String型なのですが、String型の欠点は、Nullを受け取れないのです。

String型で、よく表示されるエラーが、

「Nullの使い方が不正です」

このようなエラーが表示されます。

私は、このエラーに悩まされました。

このエラーの解決方法は、カンタンなのです。

String型の変数は、Nullを受け取れないのです。

このエラーに3日悩んだ記憶があります。

エラーの改善方法は、その時点では、解決できませんでした。

氏名分割 作業手順 その4 配列に格納

Dim myArray As Variant

myArray = Split(Nz(str, “”), ” “, , vbTextCompare)

引数strをスペースで分割して配列myArrayに格納します 。

引数が、「伊川 直助」の場合
  • myArray(0)が「伊川」
  • myArray(1)が「直助」

上記のようになります。

氏名分割 作業手順 その5 ユーザー定義関数での仕掛け

今回のnameHenkanは、引数で渡された文字列strをスペースで分割します。

引数で渡された文字列strはNullの可能性ありますので、Nz関数を利用してNullを0に変換しました。


ACCESSは、空白は、なにも表示されません。

そのために、空白を0に変換するのがNz関数です。

全角、半角に対応したいためvbTextCompareを使用しました。

この辺は、ジグソーパズルと同じです。

組み合わせを丁寧に考えると完成は近いです。

氏名分割 作業手順 その6 ユーザー定義関数で条件分岐

引数nが1以上の配列の要素数以下の場合、N番目の配列の要素を返します。

氏名分割 作業手順 その7 ACCESSのクエリで表現





これで完成です。

ここがポイント

ここがポイント
Function8.png
今回は、Split関数をACCESSで利用することを紹介しました。関数を組み合わせて氏名分割をするのもいいかなと思います。しかし、複雑な数式を記載するのもいいですが、ユーザー定義関数を利用する方が便利です。ユーザー定義関数は、VBAに慣れるためにも積極的に利用したほうがいいのかなと思います。

また、ACCESSは、列にSQL文を記載すると、すべて分割されます。

これが、データベースなのです。

 

まとめ

今回は、Split関数をACCESSで利用することを紹介しました。

ACCESSで氏名分割は、Instr関数と、Right関数と、Len関数を利用します。

でも、一旦、ユーザー定義関数を作成しておいた方が、便利ですよね。

今回のサンプルファイルは、No165です。

サンプルファイルの購入
ブログが動画で紹介した内容のサンプルファイルを
購入できます。月額3,000円です。
練習用ファイルもダウンロードできます。
PayPal経由でお支払いでます。
ダウンロード回数に制限はありません。
スポンサーリンク

Twitterでフォローしよう

おすすめの記事