目次
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のクエリで表現
これで完成です。
ここがポイント
今回は、Split関数をACCESSで利用することを紹介しました。関数を組み合わせて氏名分割をするのもいいかなと思います。しかし、複雑な数式を記載するのもいいですが、ユーザー定義関数を利用する方が便利です。ユーザー定義関数は、VBAに慣れるためにも積極的に利用したほうがいいのかなと思います。
また、ACCESSは、列にSQL文を記載すると、すべて分割されます。
これが、データベースなのです。
まとめ
今回は、Split関数をACCESSで利用することを紹介しました。
ACCESSで氏名分割は、Instr関数と、Right関数と、Len関数を利用します。
でも、一旦、ユーザー定義関数を作成しておいた方が、便利ですよね。
今回のサンプルファイルは、No165です。
わからない事を延々と考えるのは、無駄です。
- なんで作動かないの?
- もうやだ!VBAなんか嫌い!
- ネットで調べても情報がない!
必ず作動するコードが、ここにあります。