B-Teck!

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

【VBA】文字列の大文字小文字を判定する

自分自身を大文字に変換した後、変換前後を比較すると大文字小文字を判定できる。
VBAでは大文字小文字がイコールではうまく判定されないので、

 StrComp("変換文字列1", "変換文字列2", vbBinaryCompare) 

でバイナリでの比較を行う必要がある。

Option Explicit

'/**
' * IsUpperString
' * 入力文字列が大文字かを調べる
' * @param  inputValue   比較する文字列
' * @param  Optional inputValue 比較する文字数  1以上  :先頭からの文字数
' *                                             0(省略):文字列全体
' *                                             -1以下 :末尾からの文字数
' * @return True:大文字 False:小文字
' */
Public Function IsUpperString(ByVal inputValue As String, _
                              Optional ByVal checkLen As Integer = 0) As Boolean

    Dim checkString As String
    Dim upperString As String
    
    '引数に応じてチェック対象の文字を取得
    If checkLen < 0 Then
        checkString = Right(inputValue, Abs(checkLen))
    ElseIf checkLen > 0 Then
        checkString = Left(inputValue, checkLen)
    Else
        checkString = inputValue
    End If
    
    'チェック対象の文字を大文字に変換
    upperString = StrConv(checkString, vbUpperCase)
    
    '大文字にしたチェック対象の文字列と、変換前の文字列を比較
    If StrComp(upperString, checkString, vbBinaryCompare) = 0 Then
        IsUpperString = True
    Else
        IsUpperString = False
    End If

End Function

'動作確認
Public Sub test()

    'True
    Debug.Print IsUpperString("A")
    'False
    Debug.Print IsUpperString("a")
    
    'True
    Debug.Print IsUpperString("ABCd", 2)
    'True
    Debug.Print IsUpperString("ABCd", 3)
    'False
    Debug.Print IsUpperString("ABCd", 4)
    
    'True
    Debug.Print IsUpperString("aBCD", -2)
    'True
    Debug.Print IsUpperString("aBCD", -3)
    'False
    Debug.Print IsUpperString("aBCD", -4)

End Sub