ある文字列が、ひらがな/カタカナ かどうかを判定してみましょう。1文字だけを判定するのでしたら、Like演算子を使うのが簡単です。
Sub Sample1() Dim msg As String If Left(Range("A1"), 1) Like "[あ-ん]" Then msg = Left(Range("A1"), 1) & " は、ひらがなです" & vbCrLf Else msg = Left(Range("A1"), 1) & " は、ひらがなではありません" & vbCrLf End If If Left(Range("A1"), 1) Like "[ア-ン]" Then msg = msg & Left(Range("A1"), 1) & " は、カタカナです" & vbCrLf Else msg = msg & Left(Range("A1"), 1) & " は、カタカナではありません" & vbCrLf End If MsgBox msg End Sub
では、文字列全体を判定するのなら、文字列の先頭から1文字ずつチェックして・・・なんて必要はありません。判定したい文字列を、ひらがな/カタカナ に変換してみて、その結果が元の文字列と等しいかどうかを調べればいいんです。文字種の変換には、StrConv関数を使います。
Sub Sample2() Dim msg As String If Range("A1") = StrConv(Range("A1"), vbHiragana) Then msg = Range("A1") & " は、ひらがなです" & vbCrLf Else msg = Range("A1") & " は、ひらがなではありません" & vbCrLf End If If Range("A1") = StrConv(Range("A1"), vbKatakana) Then msg = msg & Range("A1") & " は、カタカナです" & vbCrLf Else msg = msg & Range("A1") & " は、カタカナではありません" & vbCrLf End If MsgBox msg End Sub
もちろん、ひらがな/カタカナ が「含まれている」かどうかも判定できます。
Sub Sample3() If Range("A1") = StrConv(Range("A1"), vbKatakana) Then MsgBox "すべてカタカナです" Else MsgBox "ひらがな が含まれています" End If End Sub
これも、上と同じようにStrConv関数で判定できます。
Sub Sample4() If Range("A1") = StrConv(Range("A1"), vbNarrow) Then MsgBox "半角です" Else MsgBox "全角です" End If End Sub
半角に変換するときは、StrConv関数の第2引数にvbNarrowを指定します。全角に変換するときは、vbWideです。
半角/全角を判定する古典的な方法として、文字列のバイト数を比較するというのがあります。Len関数とLenB関数の結果が等しかったら、それは半角と。等しくなかったら全角が含まれていると。そういう考え方です。このLen関数とLenB関数は、ワークシート関数とVBAの関数で結果が異なりますので留意してください。
Sub Sample6() MsgBox "Len → " & Len(Range("A1")) & vbCrLf & _ "LenB → " & LenB(Range("A1")) End Sub
Excel 97以降、Excelでは文字をUnicodeで管理しています。Unicodeは、すべての文字を2バイトで表しますので、半角文字であってもバイト数は2バイトになります。そういう意味では、ワークシート関数の結果は間違っているのですが、これは旧バージョンと互換性を保つための仕様です。
考え方は同じです。判定する文字列を、大文字/小文字に変換してみて、その結果が等しいかどうかを調べます。文字列を大文字に変換するのはUCase関数で、小文字に変換するのがLCase関数です。
Sub Sample7() If Range("A1") = UCase(Range("A1")) Then MsgBox "すべて大文字です" Else MsgBox "小文字が含まれています" End If End Sub