私の会社では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年改訂前はこれよりやや少ない)

引用:https://fontnavi.jp/zakkuri/301-jis_Level1-2_kanji.aspx

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」を入力する必要があります。

その点に注意してぜひご活用くださいませ。

 

ではまた!!