HOME > 即効テクニック > Excel VBA > 文字列操作関連のテクニック > 大文字/小文字や全角/半角を区別しない

大文字/小文字や全角/半角を区別しない|Excel VBA

文字列操作関連のテクニック

大文字/小文字や全角/半角を区別しない

(Excel 97/2000/2002/2003/2007/2010/2013)

次のマクロは、アクティブシートに「Excel」と入力されたセルが存在するかどうか調べます。

Sub Sample1()
    Dim c As Range, Target As String
    Target = "Excel"
    For Each c In ActiveSheet.UsedRange
        If c.Value = Target Then
            MsgBox Target & "は存在します(" & c.Address & ")"
        End If
    Next c
End Sub

「Excel」と入力されたセルがあれば、メッセージボックスを表示します。
では「EXCEL」や「excel」のように大文字や小文字で入力されていた場合はどうでしょう。
セルの「EXCEL」や「excel」と、検索文字列の「Excel」は"等しくない"と判定されます。
関係演算子の「=」は、大文字と小文字を区別するからです。

これらを"等しい"とみなすには、どうしたらいいでしょうか。
大文字と小文字を区別しないで判定するには、発想を変えて、「どちらも大文字」あるいは「どちらも小文字」に変換してから比較すればよいでしょう。

Sub Sample2()
    Dim c As Range, Target As String
    Target = "Excel" 
    For Each c In ActiveSheet.UsedRange
        If UCase(c.Value) = UCase(Target) Then  '---(1)
            Debug.Print Target & " が存在します(" & c.Address & ")"
        End If
    Next c
End Sub

UCase関数は、引数に指定した文字列を大文字に変換します。
小文字に変換する場合はLCase関数を使用します。

「8月」と「8月」のように、全角と半角を区別しないで比較する場合も同じです。
両者を全角か半角に揃えてから比較すればOKです。
全角/半角を変換するには、StrConv関数を使用します。

大文字/小文字、全角/半角のどちらも区別しないで検索するには、Sample2の(1)の部分を次のように変更してください。

If StrConv(UCase(c.Value), vbNarrow) = StrConv(UCase(Target), vbNarrow) Then