大体でIT

-ちょっと使えるネタを紹介-

大体でIT

Excel VBAで文字列を比較する方法についてご紹介します。文字列を単純に比較するのは簡単です。ですが、大文字や小文字、全角、半角が文字列に混ざっていると比較が難しくなります。StrCompを使うと、文字の種類を区別せず、簡単に比較ができます。

はじめに

この記事では、文字列を比較する比較演算子とStrCompについてご紹介します。

文字列を単純に比較するのは簡単です。ですが、全角や半角、大文字、小文字が混ざっていると、比較ができません。

そんなときは、全角や半角、大文字、小文字を区別せずに比較する方法が使えます。

大文字、小文字、半角、全角を区別することなく比較する方法を、比較演算子を使った場合とStrCompで説明していきます。

この記事で紹介すること

  • 文字列を比較演算子を使って比較
  • 文字列をStrCompを使って比較

目次

ポイントとなるVBAコード

初めに、この記事でポイントとなるVBAコードを記載しておきます。

'比較演算子を使って比較
'一致する場合
If a = b Then
'一致しない場合
If a <> b Then
'大文字の半角に統一する
a = StrConv(UCase("ABC"), vbNarrow)

'StrCompを使って比較
'一致する場合
If StrComp(a, b) = 0 Then
'一致しない場合
If StrComp(a, b) <> 0 Then
'全角と半角、大文字と小文字、カタカナとひらがなを区別しない
If StrComp(a, b, vbTextCompare) = 0 Then

では、解説していきます。

VBAで文字列を比較演算子を使って比較

Excel VBAで、文字列を比較する簡単な方法として、比較演算子があります。

比較演算子は、一致する場合に使う『=』と不一致の場合に使う『<>』があります。

『=』で比較する

文字列が一致するかを判定するには、比較演算子『=』を使えばできます。

文字列『ABC』と『ABC』が一致するかを比較するVBAコードです。

Sub TEST1()
    
    a = "ABC"
    b = "ABC"
    
    '一致する場合
    If a = b Then
        MsgBox "一致します"
    End If
    
End Sub

VBAの実行結果です。

比較演算子『=』で比較

比較演算子を使って文字列が一致するかを比較した結果

結果は、もちろん『一致します』となります。

『<>』で比較する

文字列が一致しないかを判定する比較演算子は『<>』となります。

簡単な例として、文字列『ABC』と『abc』が一致しないかを比較するVBAコードを作ってみます。

Sub TEST2()
    
    a = "ABC"
    b = "abc"
    
    '一致しない場合
    If a <> b Then
        MsgBox "一致しません"
    End If
    
End Sub

VBAの実行結果です。

比較演算子『<>』で比較

比較演算子を使って文字列が一致しないかを判定した結果

結果は、『一致しません』となります。

大文字と小文字を区別しない

文字列を比較する際に、大文字を小文字を区別したくないときは、『Ucase』を使うといいです。

文字列『ABC』と『abc』を大文字と小文字を区別しないで比較してみます。

Sub TEST3()
    
    a = UCase("ABC") '大文字に変換する
    b = UCase("abc") '大文字に変換する
    
    '一致する場合
    If a = b Then
        MsgBox "一致します"
    End If
    
End Sub

VBAコードを実行してみます。

大文字と小文字を区別しないで比較

Ucaseを使って大文字、小文字を区別しないで比較した結果

結果は、『一致します』となります。

大文字と小文字を区別したくないのであれば、比較する両方の文字列を、大文字もしくは小文字に統一しましょう。

全角と半角を区別しない

全角と半角を区別しないで文字列を比較するには、『StrConv』を使えばできます。

文字列『ABC』と『ABC』を全角と半角を区別しない比較してみます。

Sub TEST4()
    
    a = StrConv("ABC", vbNarrow) '半角に変換する
    b = StrConv("ABC", vbNarrow) '半角に変換する
    
    '一致する場合
    If a = b Then
        MsgBox "一致します"
    End If
    
End Sub

実行してみます。

全角と半角を区別しないで比較

StrConvを使って全角と半角を区別しないで比較した結果

結果は、『一致します』となりました。

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

ちょっと組み合わせ技です。

全角と半角、そして、大文字と小文字も区別しないで比較するには、『Ucase』と『StrConv』を組み合わせます。

文字列『ABC』と『abc』を全角と半角、大文字と小文字を区別しないで比較するVBAコードです。

Sub TEST5()
    
    a = StrConv(UCase("ABC"), vbNarrow) '大文字の半角に変換
    b = StrConv(UCase("abc"), vbNarrow) '大文字の半角に変換
    
    '一致する場合
    If a = b Then
        MsgBox "一致します"
    End If
    
End Sub

結果をみてみます。

全角と半角、大文字と小文字を区別しないで比較

StrConvとUcaseを組み合わせて全角、半角、大文字、小文字を区別しないで比較した結果

結果は、『一致します』となりました。

『ABC』と『abc』ってほぼ別ものですけどね。文字の種類を区別しないで比較ができます。

VBAで文字列をStrCompを使って比較

Excel VBAで文字列を比較するもう一つの方法として、『StrComp』があります。

StrComp使い方

StrCompの入力は、

『数字 = StrComp(文字列,文字列)』

とすれば、文字列を比較できます。

返り値の『数字』に入る値は、

  • 文字列が一致の場合:0
  • 左の文字列が大きい場合:1
  • 右の文字列が大きい場合:-1

のようになります。

一致・不一致となった場合

では、文字列が一致する場合の例でStrCompの動きをみてみます。

一致する場合

文字列『ABC』と『ABC』をStrCompで比較するVBAコードです。

Sub TEST6()
    
    a = "ABC"
    b = "ABC"
    
    '一致する場合
    If StrComp(a, b) = 0 Then
        MsgBox "一致します"
    End If
    
End Sub

結果です。

StrCompで文字列を比較した結果

結果は、『一致します』となります。

不一致となる場合

文字列『ABC』と『abc』をStrCompで比較するVBAコードです。

Sub TEST7()
    
    a = "ABC"
    b = "abc"
    
    '一致しない場合
    If StrComp(a, b) <> 0 Then
        MsgBox "一致しません"
    End If
    
End Sub

結果です。

StrCompで文字列を比較した結果

結果は、『一致しません』となります。

文字列が一致しない場合は、StrCompは『0以外の値』を返すので、条件『<> 0』が成り立ちます。

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

StrCompで文字列を比較する際に、全角と半角、大文字と小文字を区別しないで比較することができます。

あと、次のやり方を使うと、カタカナとひらがなも区別しないで比較できます。

やり方

やり方は、StrCompに次のように入力します。

『StrComp(文字列, 文字列, vbTextCompare)』

3つ目の引数に『vbTextCompare』を入力するだけです。

大文字と小文字を比較してみる

大文字と小文字を比較してみます。

文字列『ABC』と『abc』を文字種類を区別せずに、比較するVBAコードです。

Sub TEST8()
    
    a = "ABC"
    b = "abc"
    
    '半角と全角、大文字と小文字、カタカナとひらがなと区別せずに比較
    If StrComp(a, b, vbTextCompare) = 0 Then
        MsgBox "一致します"
    End If
    
End Sub

結果です。

大文字と小文字を比較した結果

結果は、『一致します』となりました。

全角と半角を比較してみる

全角と半角を比較してみます。

文字列『ABC』と『ABC』を文字種類を区別せずに、比較するVBAコードです。

Sub TEST9()
    
    a = "ABC"
    b = "ABC"
    
    '半角と全角、大文字と小文字、カタカナとひらがなと区別せずに比較
    If StrComp(a, b, vbTextCompare) = 0 Then
        MsgBox "一致します"
    End If
    
End Sub

結果です。

全角と半角を比較した結果

結果は、『一致します』となりました。

全角+大文字と半角+小文字を比較

全角+大文字と半角+小文字を比較してみます。

文字列『ABC』と『abc』を文字種類を区別せずに、比較するVBAコードです。

Sub TEST10()
    
    a = "ABC"
    b = "abc"
    
    '半角と全角、大文字と小文字、カタカナとひらがなと区別せずに比較
    If StrComp(a, b, vbTextCompare) = 0 Then
        MsgBox "一致します"
    End If
    
End Sub

結果です。

全角+大文字と半角+小文字を比較した結果

結果は、『一致します』となりました。

StrCompで比較するとVBAコードがシンプルになります。

ひらがなとカタカナを比較

StrCompの3つ目の引数に『vbTextCompare』を入力すると、ひらがなとカタカナも区別せずに、比較することができます。

文字列『あいう』と『アイウ』を文字種類を区別せずに、比較してみます。

Sub TEST11()
    
    a = "あいう"
    b = "アイウ"
    
    '半角と全角、大文字と小文字、カタカナとひらがなと区別せずに比較
    If StrComp(a, b, vbTextCompare) = 0 Then
        MsgBox "一致します"
    End If
    
End Sub

結果です。

ひらがなとカタカナを区別せずに比較した結果

結果は、『一致します』となります。

全角、半角、大文字、小文字、ひらがな、カタカナを区別せずに比較したい場合は、『StrComp』を使いましょう。

コードがシンプルになります。

おわりに

この記事では、文字列を比較する比較演算子とStrCompについてご紹介しました。

文字列を単純に比較するのは簡単です。しかし、全角や半角、大文字、小文字が混ざっていると、比較ができなくなってしまいます。

そんなときは、全角や半角、大文字、小文字を区別せずに比較する方法が使えます。

大文字や小文字だけでなく、全角や半角も混ざっているときは、『StrComp』を使うとコードがシンプルになります。

参考になればと思います。最後までご覧くださいましてありがとうございました。

関連する記事から探す

カテゴリから探す

カテゴリから見たい項目を探すと便利ですよ。

アーカイブから探す