以前書いた「ルビ(ふりがな)を一括設定するWordマクロ」記事で使った、指定した文字が漢字なのかどうかを判別するマクロに、指定した文字が平仮名なのかカタカナなのかを判別するマクロも付け加えてみました。
Option Explicit Public Sub Sample() Dim s As String, tp As String, msg As String Dim i As Long Const str As String = "ゐどのヰa﨣メ祖レヱえへbゑクヰャ湮ウcヮヴ挽Z" For i = 1 To Len(str) s = Mid(str, i, 1) If IsHiragana(s) = True Then tp = "ひらがな" ElseIf IsKatakana(s) = True Then tp = "カタカナ" ElseIf IsKanji(s) = True Then tp = "漢字" Else tp = "その他" End If If i = 1 Then msg = "「" & s & "」は【" & tp & "】です。" Else msg = msg & vbCrLf & "「" & s & "」は【" & tp & "】です。" End If Next MsgBox msg End Sub Private Function IsHiragana(ByVal char As String) As Boolean 'ひらがな判別 Dim cc As Variant Dim ret As Boolean ret = True '初期化 cc = Val("&H" & Hex(AscW(char)) & "&") Select Case cc Case 12352 To 12447 'ひらがな(U+3040-U+309F) Case Else ret = False End Select IsHiragana = ret End Function Private Function IsKatakana(ByVal char As String) As Boolean 'カタカナ判別 Dim cc As Variant Dim ret As Boolean ret = True '初期化 cc = Val("&H" & Hex(AscW(char)) & "&") Select Case cc Case 12448 To 12543 'カタカナ(U+30A0-U+30FF) Case Else ret = False End Select IsKatakana = ret End Function Private Function IsKanji(ByVal char As String) As Boolean '漢字判別 Dim cc As Variant Dim ret As Boolean ret = True '初期化 cc = Val("&H" & Hex(AscW(char)) & "&") Select Case cc Case 19968 To 40959 'CJK統合漢字(U+4E00-U+9FFF) Case 13312 To 19903 'CJK統合漢字拡張A(U+3400-U+4DBF) Case 131072 To 173791 'CJK統合漢字拡張B(U+20000-U+2A6DF) Case 173824 To 177983 'CJK統合漢字拡張C(U+2A700-U+2B73F) Case 177984 To 178207 'CJK統合漢字拡張D(U+2B740-U+2B81F) Case 63744 To 64255 'CJK互換漢字(U+F900-U+FAFF) Case 194560 To 195103 'CJK互換漢字補助(U+2F800-U+2FA1F) Case Else ret = False End Select IsKanji = ret End Function
AscW関数で文字コードを調べて、そのコードが平仮名なのかカタカナなのか漢字なのかを調べるという、シンプルなマクロです。
正規表現でも文字の種類を判別できますが、今回はSelect Caseを使ってみました。
この記事へのコメントはありません。