isKanjiメソッドを久々に修正した
漢字かどうかを判定するFunction
まじめに手直しした。
元のコード
コチラが、元のisKanji
メソッドのコード。
リスト1
Public Function isKanji(ByVal targetCharacter As String) As Boolean Dim char As String char = targetCharacter If Len(char) <> 1 Then Call Err.Raise( _ Number:=10001, _ Description:="引数は1文字のみにしてください。") If Asc(char) > 0 Then isKanji = False: Exit Function If Asc(char) >= &H889F Then isKanji = True Else isKanji = False End If End Function
うーむ……。実にテキトーである。
これでは、第2水準以降とか、全然対応できないではないか。
で、ちょっとまじめに書き直してみた。
文字コード表は、コチラのお世話になりました。いつもありがとうございます。
書き直したコード
修正したisKanji
メソッドのコードがコチラ。
リスト2
Private Function isKanji( _ ByVal a_Char As String) As Boolean '///漢字だったらTrueを返す。' Const SP_KANJI = "ヽ ヾ ゝ ゞ 〃 仝 々 〆" Dim arr() As String arr = Split(SP_KANJI) isKanji = True 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 Next '第4レベルの漢字判定' If CInt(Asc(char)) > CInt(&HFC4B) Then isKanji = False Exit Function End If If CInt(Asc(char)) > CInt(&HFA5B) Then Exit Function '第3レベルの漢字判定' If CInt(Asc(char)) > CInt(&HEAA4) Then isKanji = False Exit Function End If If CInt(Asc(char)) > CInt(&HE039) Then Exit Function '第2レベルの漢字判定' If CInt(Asc(char)) > CInt(&H9FFC) Then isKanji = False Exit Function End If If CInt(Asc(char)) > CInt(&H989E) Then Exit Function '第1レベルの漢字判定' If CInt(Asc(char)) > CInt(&H9872) Then isKanji = False Exit Function End If If CInt(Asc(char)) > CInt(&H889E) Then Exit Function 'ここまで引っかからなかったらFalse' isKanji = False End Function
文字コード表とにらめっこしながら、がんばったよ!
使ってみる
次のコードで実験
リスト3
Private Sub test10() Dim char As String * 1 char = "黑" '……(*)' Debug.Print char & " : "; isKanji(char) End Sub
(*)
のところで、変数char
に色んな文字を入れてみて実験。
うむ。
おわりに
こんなもんでいいのではなかろうか。