PR

【Excel VBA】特定の文字列が含まれているかどうか判定(InStr関数とIf関数の組み合わせ)

VBA

InStr関数を使用して、文字列の中に特定の文字列が含まれているか検索する使い方についてご紹介します。文字列の中に特定の文字列があったら~する、のように処理を分岐させたいときにIF関数と組み合わせて使用します。

おまけでLike演算子を使った「(特定の文字列)~で始まる」場合や「(特定の文字列)~で終わる」場合の使い方も紹介しています。見出しをクリックしてご覧ください。

スポンサーリンク

InStr関数の基本的な使い方

InStr関数は特定の文字列が何文字目にあるかを返してくれる関数です。
InStr関数の読み方は「インエスティーアール」。String(文字列)がInしているかを調べるための関数です。

たとえば↓のような色々なフルーツの商品名データがあったとして、「りんご」の文字が何文字目にあるかをInStr関数を使用して出力してみます。

ExcelVBA-Instr関数で文字をカウントする前の状態

▽VBAコードはこちら
行のループを使用して「りんご」の文字が何文字目にあるかを調べてB列に出力します。

Sub Sample_1()

 Dim i As Integer

   'A列の2行目~17行目まで繰り返し
   For i = 2 To 17
       '「りんご」の文字が何文字目にあるかをB列に数を出力
       Cells(i, 2) = InStr(Cells(i, 1), "りんご")
   Next

End Sub

▽マクロ実行後
B列に値が出力されました。
3行目・7行目は1文字目に「りんご」の文字があり、11行目は5文字目にあることが分かりました。
それ以外の行にはカウント列に「0」が出力されて「りんご」の文字が入っていないことがわかります。

ExcelVBA-Instr関数で文字をカウントした後の状態
スポンサーリンク

InStr関数の応用:If関数と組み合わせて文字列検索に使用する方法

上で紹介したのが基本的なInStr関数の使い方ですが、これを応用して特定の文字が含まれているかを判定して処理を分岐させてみます。

▽マクロ実行前
 先ほどの商品名を使用して「りんご」の文字がある場合(含まれている場合)、セルを赤色に塗りつぶしてみたいと思います。

ExcelVBA-文字が含まれるか判定する前の状態

▽VBAコードはこちら
 行のループを使用しています。
 InStr関数で「りんご」の文字が含まれているかを調べて、0より大きい場合(何文字目かにりんごが存在する場合)、セルの塗りつぶしを行うように、Ifの条件で判定しています。

Sub Sample_2()

  Dim i As Integer

  'A列の2行目~17行目まで繰り返し
  For i = 2 To 17

      '「りんご」の文字が含まれていたら
      If InStr(Cells(i, 1), "りんご") > 0 Then

         '赤色に塗りつぶし
         Cells(i, 1).Interior.Color = RGB(255, 0, 0)

      End If

  Next

End Sub

▽マクロ実行後
 「りんご」の文字が含まれているセルのみ赤色に塗りつぶしされていることが分かります。

ExcelVBA-文字が含まれるか判定した後の状態

上記のように、Instr関数をIfと組み合わせて、結果が0かどうかで文字列が含まれているか、含まれていないかを判定する、という方法はとても便利なので実務でよく使用します。

‘文字(○○)が含まれている場合
If InStr(Range(“A1”), “○○”) > 0 Then
 ここにやりたい処理
EndIf

‘文字(○○)が含まれていない場合
If InStr(Range(“A1”), “○○”) = 0 Then
 ここにやりたい処理(エラー処理など)
EndIf

◎こんなときによく使います
 ・特定の文字が含まれていたら行の削除を行う
 ・特定の文字が含まれていない場合、エラーメッセージを出力する
 ・特定の文字が含まれている場合、データを振り分ける 

スポンサーリンク

Like演算子(特定の文字~で始まる場合)

Instr関数では特定の文字を含むかどうかを判定して処理を分岐させることができますが、特定の文字が先頭に入っているのか、最後に入っているのかで判断したい場合は使用できません。
その場合はInstrではなくLike演算子を使用する必要があります。

「~で始まる」で調べたいときには調べたい文字の後にアスタリスク「*」を付けて、判定します。

下の例では「りんご」の文字で始まる場合、セルを赤く塗りつぶす処理を行います。

Sub Sample_3()
'--------------------------------------
'Like演算子を使って「~で始まる」場合
'--------------------------------------
Dim i As Integer

 'A列の2行目~17行目まで繰り返し
 For i = 2 To 17

    '「りんご」の文字で始まる
    If Cells(i, 1) Like "りんご*" Then

       '赤色に塗りつぶし
       Cells(i, 1).Interior.Color = RGB(255, 0, 0)

    End If

 Next

End Sub

▽マクロ実行後
 「りんご」の文字で始まる3行目と7行目が赤くなりました。

ExcelVBA-文字が含まれる場合塗りつぶされた状態
スポンサーリンク

Like演算子(特定の文字~で終わる場合)

今度は特定の文字列で終わる場合に処理を分岐させたいと思います。
「~で終わる」で調べたいときは調べたい文字の前にアスタリスク「*」を付けて、判定します。

下の例では「ジュース」の文字で終わる場合に、セルを赤く塗りつぶす処理を行います。

Sub Sample_4()
'--------------------------------------
'Like演算子を使って「~で終わる」場合
'--------------------------------------
Dim i As Integer

 'A列の2行目~17行目まで繰り返し
 For i = 2 To 17

    '「ジュース」の文字で終わる
    If Cells(i, 1) Like "*ジュース" Then

       '赤色に塗りつぶし
       Cells(i, 1).Interior.Color = RGB(255, 0, 0)

    End If

 Next

End Sub

▽マクロ実行後
 「ジュース」の文字で終わる6行目~13行目が赤くなりました。

ExcelVBA-文字が含まれる場合塗りつぶされた状態

いかがでしたでしょうか。
Instrを使って「~を含む」で調べる方法とLike演算子を使って「~で始まる」「~で終わる」を調べる方法を知っていると色々なパターンで役に立つと思いますのでぜひ使ってみてください。

スポンサーリンク

※コードのコピー利用について

・コードのコピーは自由におこなっていただけます。
・気を付けて作成はしていますがコードには誤りがある可能性があります。
・自身の環境で動作確認をしていますが、すべての方の環境で同様に動くことは保証できません。
・データの破損等の責任は負いかねますのでご自身の責任のもとお使いください。

タイトルとURLをコピーしました