漢字かどうかを判定する関数
タイトルのマクロは、以下です。
'********************************************************
'* 関数名: isKanji
'* 概要: 指定された1文字が漢字かどうかを判定する関数
'*
'* 引数:
'* a_Char [String] - 判定対象の1文字(1文字である必要あり)
'*
'* 戻り値:
'* [Boolean] - 漢字であれば True、そうでなければ False
'*
'* 注意点:
'* - 特定の漢字記号(々、〆など)は特別扱いで True とする。
'* - 通常の Shift_JIS 漢字範囲に基づいて判定。
'********************************************************
Function isKanji(ByVal a_Char As String) As Boolean
' 特殊な記号的漢字を定数として定義
Const SP_KANJI = "ヽ ヾ ゝ ゞ 〃 仝 々 〆"
' 文字列を配列に分割(半角スペース区切り)
Dim arr() As String
arr = Split(SP_KANJI)
' 戻り値の初期値を True に設定(基本的には漢字と仮定)
isKanji = True
' 入力文字を1文字として取り出し(安全のため型指定)
Dim char As String * 1
char = a_Char
Dim i As Long
'--- ① 特殊な記号的漢字であるかを確認 ---
For i = LBound(arr) To UBound(arr)
If char = arr(i) Then
Exit Function ' 特殊記号の場合は isKanji = True のまま終了
End If
Next
'--- ② 各漢字レベルの範囲で判定 ---
' 以下は Shift_JIS における JIS第1~第4水準漢字のコード範囲を
' 上から順にチェックしていく処理。
' 条件を満たすごとに、はみ出した文字は漢字ではないと判定。
' 第4水準の上限を超えていれば漢字ではない
If CInt(Asc(char)) > &HFC4B Then
isKanji = False
Exit Function
End If
' 第4水準の範囲を通過(ここまで来ればOK)
If CInt(Asc(char)) > &HFA5B Then Exit Function
' 第3水準の上限を超えていれば漢字ではない
If CInt(Asc(char)) > &HEAA4 Then
isKanji = False
Exit Function
End If
' 第3水準の範囲を通過
If CInt(Asc(char)) > &HE039 Then Exit Function
' 第2水準の上限を超えていれば漢字ではない
If CInt(Asc(char)) > &H9FFC Then
isKanji = False
Exit Function
End If
' 第2水準の範囲を通過
If CInt(Asc(char)) > &H989E Then Exit Function
' 第1水準の上限を超えていれば漢字ではない
If CInt(Asc(char)) > &H9872 Then
isKanji = False
Exit Function
End If
' 第1水準の範囲を通過
If CInt(Asc(char)) > &H889E Then Exit Function
'--- ③ 最後まで判定に引っかからなければ False ---
isKanji = False
End Function
🔎 補足:処理の流れの要点
処理ステップ | 内容 |
---|---|
特殊記号のチェック | 々 や 〆 などは漢字として認識(True) |
Shift_JIS範囲判定 | 第1~第4水準漢字のコード範囲で判定 |
該当しない場合 | False を返して漢字ではないと判定 |
🧪 使用例
Debug.Print isKanji("山") ' 結果: True(普通の漢字)
Debug.Print isKanji("々") ' 結果: True(特殊な記号的漢字)
Debug.Print isKanji("A") ' 結果: False(アルファベット)
Debug.Print isKanji("あ") ' 結果: False(ひらがな)