大体でIT

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

大体でIT

Excel VBAで文字列をLikeを使って判定する方法についてご紹介します。Likeの中でワイルドカードやNotを使えば、複雑な文字列の判定をすることができます。

はじめに

この記事では文字列を判定するLikeの使い方をご紹介します。

Likeを使う際に指定できるワイルドカードや記号が6つあります。

Likeとワイルドカード、記号をうまく使うと文字列を自由に判定することができます。

具体例を挙げながら説明してきます。

この記事で紹介すること

  • 文字列をLikeを使って判定する

目次

VBAのLikeで使えるワイルドカードと記号

Excel VBAで文字列を判定する方法にLikeがあります。

Likeを使えば、複雑な文字列と特定の文字列が一致するかを判定することができます。

Likeで使えるワイルドカードと記号は次の6つがあります。

  • * ⇒0文字以上で任意の文字
  • ? ⇒1文字で任意の文字
  • # ⇒1文字の数字
  • [!文字] ⇒指定した文字以外
  • [文字-文字] ⇒指定した文字から文字
  • [文字,文字] ⇒指定した文字のOr要素

記号ばっかりで文字化けみたいですが、これらの6つを使いこなすとLikeで自由に文字列を判定することができます。

では使い方を解説していきます。

Likeでワイルドカード『*』を使う

0文字以上で任意の文字という意味のワイルドカード『*』を使って文字列を判定してみます。

文字列にAを含む

文字列にAを含むかを判定してみます。

『*A*』という記述で判定できます。

Sub TEST1()
    
    With ActiveSheet
        For i = 1 To .Cells(Rows.Count, "A").End(xlUp).Row
            If .Cells(i, 1) Like "*[A]*" Then
                .Cells(i, 2) = "一致"
            Else
                .Cells(i, 2) = ""
            End If
        Next
    End With
    
End Sub

VBAコードは長いですが、赤文字の部分だけをみればいいです。

VBAコードの結果を見てみます。

Aを含むか判定

ワイルドカード*を使ってAを含むかを判定した結果

結果は、文字列の中に『A』を含むものだけが一致となりました。

『*A*』で『A』を含む文字列の判定ができています。

文字列にAを含まない(Not)

次に文字列にAを含まないことを判定してみます。

先ほどの文字列にAを含むの反対なので『*A*』と『Not』を使います。

Sub TEST2()
    
    With ActiveSheet
        For i = 1 To .Cells(Rows.Count, "A").End(xlUp).Row
            If Not .Cells(i, 1) Like "*[A]*" Then
                .Cells(i, 2) = "一致"
            Else
                .Cells(i, 2) = ""
            End If
        Next
    End With
    
End Sub

こちらも赤文字だけに注目するといいです。

結果をみてみます。

Aを含まないか判定

ワイルドカード*を使ってAを含まないかを判定した結果

結果は、『A』を含まない文字列だけが一致となりました。

正しく判定できています。

Likeでワイルドカード『?』を使う

続いて、1文字で任意の文字を示す『?』を使って文字列を判定してみます。

文字列が任意の1文字

文字列が1文字を判定するVBAコードを『?』を使って記述してみます。

Sub TEST3()
    
    With ActiveSheet
        For i = 1 To .Cells(Rows.Count, "A").End(xlUp).Row
            If .Cells(i, 1) Like "?" Then
                .Cells(i, 2) = "一致"
            Else
                .Cells(i, 2) = ""
            End If
        Next
    End With
    
End Sub

赤文字の部分に『?』を記述しています。

では結果を見てみます。

任意の1文字かを判定

任意の1文字を意味するワイルドカード?を使って文字列を判定した結果

結果は、1文字の文字列だけ一致となっています。

正しく文字列を判定できています。

文字列がA+任意の1文字

では先ほどのVBAコードに追加して、『A』+任意の1文字『?』であるかを判定してみます。

Sub TEST4()
    
    With ActiveSheet
        For i = 1 To .Cells(Rows.Count, "A").End(xlUp).Row
            If .Cells(i, 1) Like "A?" Then
                .Cells(i, 2) = "一致"
            Else
                .Cells(i, 2) = ""
            End If
        Next
    End With
    
End Sub

A+任意の1文字であるかを判定するには『A?』というように記述します。

では結果を見てみます。

A+任意の1文字かを判定

A+任意の文字列であるかをワイルドカード?を使って判定

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

最初の文字がAで、2文字なのは1つだけですね。

Likeでワイルドカード『#』を使う

数字1文字を表す『#』を使って文字列を判定する方法をご紹介します。

文字列が数字1文字

文字列が数字1文字であるかを『#』を使って判定してみます。

Sub TEST5()
    
    With ActiveSheet
        For i = 1 To .Cells(Rows.Count, "A").End(xlUp).Row
            If .Cells(i, 1) Like "#" Then
                .Cells(i, 2) = "一致"
            Else
                .Cells(i, 2) = ""
            End If
        Next
    End With
    
End Sub

赤色の部分『#』で文字列が数字1文字かを判定しています。

結果をみてみます。

数字1文字かを判定

数字1文字かを#を使って判定した結果

結果は、数字が1文字だけである文字列のみが一致となりました。

正しく文字列を判定できています。

文字列がA+数字1文字

文字列がA+数字1文字かを判定してみます。

Sub TEST6()
    
    With ActiveSheet
        For i = 1 To .Cells(Rows.Count, "A").End(xlUp).Row
            If .Cells(i, 1) Like "A#" Then
                .Cells(i, 2) = "一致"
            Else
                .Cells(i, 2) = ""
            End If
        Next
    End With
    
End Sub

文字列がA+数字1文字かを判定するには『A#』と記述します。

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

A+数字1文字かを判定

数字1文字かを判定する#を使ってA+数字1文字かを判定した結果

結果は、A+数字1文字である文字列だけが一致となりました。

正しく判定できています。

Likeで指定した文字以外を表す記号『[!文字]』

次は、指定した文字列以外を表す記号『[!]』を使った例をご紹介します。

A以外の文字

文字列がA以外の文字であるかを判定していみます。

Sub TEST7()
    
    With ActiveSheet
        For i = 1 To .Cells(Rows.Count, "A").End(xlUp).Row
            If .Cells(i, 1) Like "[!A]" Then
                .Cells(i, 2) = "一致"
            Else
                .Cells(i, 2) = ""
            End If
        Next
    End With
    
End Sub

文字列がA以外を判定するには『[!A]』と記載します。

では実行結果です。

A以外かを判定

指定した文字列以外を表す!を使った結果

結果は、A以外で1文字である文字列が一致となりました。

2文字の文字列は不一致となります。

A以外の文字列+任意の文字列

指定文字以外を表す『[!]』と他の記号を組み合わせることもできます。

A以外の文字列+任意の文字列であるかを判定してみます。

Sub TEST8()
    
    With ActiveSheet
        For i = 1 To .Cells(Rows.Count, "A").End(xlUp).Row
            If .Cells(i, 1) Like "[!A]*" Then
                .Cells(i, 2) = "一致"
            Else
                .Cells(i, 2) = ""
            End If
        Next
    End With
    
End Sub

A以外の文字列+任意の文字列は、『[!A]*』で判定できます。

では、実行結果です。

A以外の文字+任意の文字かを判定

指定文字以外を表す!と任意の文字列を表す*を組み合わせた結果

結果は、最初の1文字がA以外である文字列が一致となりました。

組み合わせ方次第で自由に文字列を判定できます。

Likeで連続する文字を表す記号『[文字-文字]』

連続する文字列で文字列を判定するには『[文字-文字]』を使うとできます。

例をご紹介します。

A~Cの文字

文字がA~Cであるかを判定してみます。

Sub TEST9()
    
    With ActiveSheet
        For i = 1 To .Cells(Rows.Count, "A").End(xlUp).Row
            If .Cells(i, 1) Like "[A-C]" Then
                .Cells(i, 2) = "一致"
            Else
                .Cells(i, 2) = ""
            End If
        Next
    End With
    
End Sub

判定するには『[A-C]』と記述するとできます。

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

A~Cの文字かを判定

連続する文字列を[-]を使って判定した結果

結果は、A、B、Cが一致するという結果となりました。

2文字だったりA~C以外は不一致となります。

A~Cの文字+任意の文字列

連続する文字列を意味する『[文字-文字]』もワイルドカードを組み合わせることができます。

最初の文字がA~Cのいずれかでそのあとが任意の文字列であるかを判定してみます。

Sub TEST10()
    
    With ActiveSheet
        For i = 1 To .Cells(Rows.Count, "A").End(xlUp).Row
            If .Cells(i, 1) Like "[A-C]*" Then
                .Cells(i, 2) = "一致"
            Else
                .Cells(i, 2) = ""
            End If
        Next
    End With
    
End Sub

最初の文字がA~Cのいずれかでそのあとが任意の文字列を判定するのは『[A-C]*』でできます。

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

A~Cの文字+任意の文字列かを判定

最初の文字がA~Cのいずれかでそのあとが任意の文字列であるかを判定した結果

結果はご覧の通りで、最初がA~Cである文字列が一致となりました。

A~Cの文字列以外+任意の文字列

先ほどのVBAコードにさらに指定文字以外『!』を組み合わせることもできます。

1文字目がA~C以外の文字列かを判定することができます。

Sub TEST11()
    
    With ActiveSheet
        For i = 1 To .Cells(Rows.Count, "A").End(xlUp).Row
            If .Cells(i, 1) Like "[!A-C]*" Then
                .Cells(i, 2) = "一致"
            Else
                .Cells(i, 2) = ""
            End If
        Next
    End With
    
End Sub

1文字目がA~C以外の文字列かを判定するには『[!A-C]*』でできます。

実行結果です。

A~C以外の文字+任意の文字列かを判定

1文字目が指定文字以外かを判定した結果

結果は、最初の1文字目がDの文字列が一致となりました。

すみません。組み合わせが何通りもあって見るのが大変だと思いますが、説明はあと少しです。

LikeでOr要素の文字を表す記号『[文字,文字]』

Or要素で文字列を判定することもできます。

例を挙げていきます。

A、BもしくはDの文字

文字列がA、BもしくはDかを判定してみます。

Sub TEST12()
    
    With ActiveSheet
        For i = 1 To .Cells(Rows.Count, "A").End(xlUp).Row
            If .Cells(i, 1) Like "[A,B,D]" Then
                .Cells(i, 2) = "一致"
            Else
                .Cells(i, 2) = ""
            End If
        Next
    End With
    
End Sub

文字列がA、BもしくはDかを判定するには、『[A,B,D]』とすればできます。

実行してみます。

A、BもしくはDかを判定

文字列が指定の文字かをOr要素で判定した結果

結果は、1文字でA、BそしてDが一致となりました。

2文字のものは不一致となります。

A、BもしくはDの文字+任意の文字

文字列をOr要素で判定する『[,]』にワイルドカードを組み合わせてみます。

最初の文字列がOr要素で指定した文字列かを判定できます。

Sub TEST13()
    
    With ActiveSheet
        For i = 1 To .Cells(Rows.Count, "A").End(xlUp).Row
            If .Cells(i, 1) Like "[A,B,D]*" Then
                .Cells(i, 2) = "一致"
            Else
                .Cells(i, 2) = ""
            End If
        Next
    End With
    
End Sub

文字列がA、BもしくはDで始まる文字列を判定するには『[A,B,D]*』でできます。

では、結果です。

A、BもしくはDの文字+任意の文字列かを判定

Or要素で判定した文字列から始まる文字列を判定した結果

結果は、A、BもしくはDから始まる文字列が一致となりました。

A、B、D以外の文字+任意の文字

先ほどの逆で、文字列がA、B、D以外から始まる文字列かを判定してみます。

Sub TEST14()
    
    With ActiveSheet
        For i = 1 To .Cells(Rows.Count, "A").End(xlUp).Row
            If .Cells(i, 1) Like "[!A,B,D]*" Then
                .Cells(i, 2) = "一致"
            Else
                .Cells(i, 2) = ""
            End If
        Next
    End With
    
End Sub

文字列がA、B、D以外から始まる文字列かを判定するには『[!A,B,D]*』でできます。

結果です。

A、B、D以外の文字+任意の文字列かを判定

Or要素を使って指定文字列以外から始まる文字列を判定した結果

結果は、Cから始まる文字列が一致となりました。

Likeで大文字と小文字を区別しないで判定

最後です。

文字列を判定するときLikeを使うと、大文字と小文字が区別されます。

大文字と小文字を区別しないで検索したいといった場合もあるかと思いますのでその方法をご紹介します。

大文字と小文字は区別される

まず、Likeでは大文字と小文字は区別されます。

Sub TEST15()
    
    With ActiveSheet
        For i = 1 To .Cells(Rows.Count, "A").End(xlUp).Row
            If .Cells(i, 1) Like "a*" Then
                .Cells(i, 2) = "一致"
            Else
                .Cells(i, 2) = ""
            End If
        Next
    End With
    
End Sub

最初の文字が『a』から始まる文字列かを判定しています。

結果です。

大文字と小文字は区別される

Likeでは大文字と小文字は区別される

大文字は不一致で、小文字だけ一致となりました。

すべて大文字に変換して判定(Ucase)

大文字と小文字を区別しないで判定するには、すべてを大文字に変換することでできます。

すべて小文字に変換でもいいです。

大文字に変換するには、『Ucase』を使います。

Sub TEST16()
    
    With ActiveSheet
        For i = 1 To .Cells(Rows.Count, "A").End(xlUp).Row
            If UCase(.Cells(i, 1)) Like UCase("a*") Then
                .Cells(i, 2) = "一致"
            Else
                .Cells(i, 2) = ""
            End If
        Next
    End With
    
End Sub

比較する文字列に『Ucase』をつけています。

結果です。

大文字と小文字を区別しないで判定する

Ucaseを使って大文字と小文字を区別しないでLikeで文字列を判定した結果

大文字も小文字も一致となりました。

おわりに

この記事では文字列を判定するLikeの使い方をご紹介しました。

Likeを使う際に指定できるワイルドカードや記号が6つありました。

Likeとワイルドカード、記号をうまく使うと文字列を自由に判定することができます。

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

関連する記事から探す

カテゴリから探す

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

アーカイブから探す