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を含まない(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』を含まない文字列だけが一致となりました。
正しく判定できています。
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文字の文字列だけ一致となっています。
正しく文字列を判定できています。
文字列が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文字かを判定
結果は、『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文字だけである文字列のみが一致となりました。
正しく文字列を判定できています。
文字列が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文字かを判定
結果は、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の文字列以外+任意の文字列
先ほどの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文字目が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かを判定
結果は、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の文字+任意の文字列かを判定
結果は、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以外の文字+任意の文字列かを判定
結果は、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』から始まる文字列かを判定しています。
結果です。
大文字と小文字は区別される
大文字は不一致で、小文字だけ一致となりました。
すべて大文字に変換して判定(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