私の会社ではCOMPANYという人事情報システムを利用しています。
実は私、COMPANY Associate 認定資格 というベンダー資格を持ってるんですね。(自慢)
それは置いておいて、COMPANYに社員を登録する際に氏名を入力するのですが、グループポリシーでJIS第1水準漢字・第2水準漢字のみしか登録しないと決められています。
今日はJIS第1漢字・第2漢字にも当てはまらない漢字、いわゆる環境依存文字・外字を抽出・判定する方法をご紹介します。
VBAコードの利用については動画で解説していますので、こちらもご参照くださいませ!
目次
JIS第1・第2水準漢字とは・・・?
JIS第1水準漢字・第2水準漢字は、日本語の情報処理を標準化する目的にJIS (日本工業規格) が定めた定義で、JIS基本漢字とも呼ばれます。
・JIS第1水準漢字 : 2,965文字
・JIS第2水準漢字 : 3,390文字 (1990年改訂前はこれよりやや少ない)
JIS第1・第2水準漢字を登録する、、としておけば大体網羅できるわけなのですが、はしご高・立ち崎などの文字は第1第2にも含まれていません。困りますね。
JIS第1~第4水準漢字まで調べるにはこちらをご覧ください。
Excelの数式で判定するには・・・?
セルA1の漢字1文字がJIS第1水準・第2水準漢字かどうかを判定するには以下の数式を利用します。
=IFERROR(IFS(AND(12321<=CODE(A1),CODE(A1)<=20307),1,AND(20513<=CODE(A1),CODE(A1)<=29734),2),0)
参考にさせていただいたのはこちらのサイトとなります。
ただ、これだと漢字一文字しか判定できませんでしたので、VBAを用いてユーザ定義関数で実現することにしてみます。
氏名の漢字をチェックするユーザ定義関数の使い方
1.Alt+F11にてVBEを起動し、標準モジュールを追加する
エクセルを開いて、Alt+F11を押下します。
すると、以下のような画面(VBE)を起動することができます。
ツリーの任意の項目を右クリックして、挿入→標準モジュール を選択しましょう。
2.追加した標準モジュールにコードを追加する
追加した標準モジュールに以下のコードを貼り付けます。
これで、「氏名チェック」という関数が使えるようになります。引数には「氏名」を入力します。
Function 氏名チェック(name As String) Dim ni As Integer Dim targetStr As String Dim checkFlg As Boolean: checkFlg = False For ni = 1 To Len(name) targetStr = Mid(name, ni, 1) ' JIS第1水準漢字 If Asc(targetStr) >= -30561 And Asc(targetStr) <= -26510 Then ' JIS第2水準漢字 ElseIf Asc(targetStr) >= -26464 And Asc(targetStr) <= -5468 Then ' ひらがな ElseIf Asc(targetStr) >= -32096 And Asc(targetStr) <= -32015 Then ' カタカナ ElseIf Asc(targetStr) >= -31935 And Asc(targetStr) <= -31853 Then ' 名前にスペースが含まれるとき ElseIf Asc(targetStr) = -32448 Or Asc(targetStr) = 32 Then ' それ以外 Else checkFlg = True End If Next ni ' 対象外の文字が存在する場合、1を返す If checkFlg = True Then 氏名チェック = 1 Else 氏名チェック = 0 End If End Function
実際に追加したスクリーンショットは以下です。
3.ユーザ定義関数をセルに入力する
実際に使ってみましょう。
セルC2に氏名チェックと入力します。この時、セルB2の たかはし かいと が第1水準漢字・第2水準漢字だけで構成されているかを判定します。
ここではたかはしの「髙」がはしご高になっていますので、氏名チェック関数は「1」を返します。
平野くんの場合、氏名チェック関数の結果は「0」となります。COMPANYに普通に登録できますね。
4.条件付き書式を設定する
これだけだとおもしろくないので、条件付き書式を設定し、判定結果を分かりやすくしましょう。
1.セルB2を選択し、条件付き書式設定画面を起動する
条件付き書式を設定するセルを選択し、条件付き書式設定より「新しいルール」を選択します。
2.新しい書式ルールとして「氏名チェック関数の判定結果が1のとき」を指定する
以下の通り、「数式を使用して、書式設定するセルを決定」を選択し、条件式に「氏名チェック関数」を用いて判定を行います。
3.一致する場合の書式に赤塗りつぶし・白フォントを設定する
判定結果を分かりやすくするため、条件に一致した場合、赤塗りつぶし・白フォントにしてみます。
設定は以下の通りです。
↓赤塗りつぶし
↓白フォント
4.結果を確認する
これで設定は完了です。セルB2に「髙橋 海人」と入力すると、赤塗りつぶし・白フォントとなります。
一方、「平野 紫耀」と入力すると、なにも設定は変わりません。これで分かりやすくなりましたね。
さいごに
今回氏名を判定するためにVBAを使ってしまいました。ですので、Excelファイルの拡張子はマクロ入りブックである「.xlsm」を入力する必要があります。
その点に注意してぜひご活用くださいませ。
ではまた!!