B-Teck!

お仕事からゲームまで幅広く

【VBA】半角カナを判定する

Not (Mid(strInput, i, 1) Like "[ヲ-゚]" Or strInput = "-")で不要な文字種を除外。
※"[ヲ-゚]“と”-“を指定するとカタカナひらがなの必要そうな文字列を抽出できる。
”-“を半角カナに含みたくない場合はstrInput = "-"を外す。
その後StrConvで一度文字列を半角カナに変換してからStrCompのバイナリモードで比較することで、
半角カナの判定ができる。

'/**
' * isHankakuKana
' * 入力文字列が半角カナかを調べる
' * @param strInput   調べる文字列
' * @return True:半角カナ False:半角カナではない
' */
Public Function isHankakuKana(ByVal strInput As String) As Boolean
    
    Dim i As Long
    
    '空文字の場合は判定前にFalse
    If strInput = "" Then
        isHankakuKana = False
        Exit Function
    End If
    
    '記号や数字、アルファベット等の場合はFalse
    For i = 1 To Len(strInput)
        If Not (Mid(strInput, i, 1) Like "[ヲ-゚]" Or strInput = "-") Then
            isHankakuKana = False
            Exit Function
        End If
    Next i
    
    '文字を半角カナに変換し、不整合ならFalse
    Dim hankakuKana As String
    hankakuKana = StrConv(strInput, vbKatakana + vbNarrow)
    isHankakuKana = StrComp(hankakuKana, strInput, vbBinaryCompare) = 0
End Function

Sub test()
    Debug.Print isHankakuKana("アイウエオ")
    Debug.Print isHankakuKana("バビブベボ")
    Debug.Print isHankakuKana("パピプペポ")
    Debug.Print isHankakuKana("゙")
    Debug.Print isHankakuKana("゚")
    Debug.Print isHankakuKana("-")
    Debug.Print isHankakuKana("アイウエオ")
    Debug.Print isHankakuKana("あいうえお")
    Debug.Print isHankakuKana("abcdefg")
    Debug.Print isHankakuKana("ABCD")
    Debug.Print isHankakuKana("123456")
    Debug.Print isHankakuKana("。゙")
    Debug.Print isHankakuKana("")
End Sub