IF文 VBAで自動化 VBAテクニック集 VBA一覧 文法・構文

【VBA】セルに特定の文字が入っていた場合にIF文で複数条件を処理する方法

Excel VBAで作業を自動化していると、
「セルに特定の文字が含まれているかを判定して、条件に応じた処理を行いたい」
という場面に必ず出会います。例えば、顧客リストの中から特定キーワードを含む行だけ色付けしたり、複数の条件を満たす場合に別の処理を走らせたり――業務やデータ整理の効率化には欠かせないテクニックです。

本記事では、If文を使った条件分岐の基本から、Like演算子・InStr関数による部分一致判定、さらに複数条件を効率的に処理する方法まで、具体的なコード例とともにわかりやすく解説します。
単一条件だけでなく、「複数の文字が含まれる場合の処理分岐」や「配列を使った柔軟な判定」までカバーしているため、この記事を読み終える頃には、業務で即使えるVBAの条件判定スキルが身につくでしょう。

✅ セルの値をチェックする基本的な方法

セルの値に特定の文字が含まれているかどうかを確認するには、主に次の2つの方法があります。

  1. Like演算子を使用する
    パターンマッチングに便利で、部分一致や特定の形式にマッチする場合に有効です。正規表現ほど複雑ではなく、短い構文で柔軟な検索ができます。
    参考:[【VBA】Like演算子で複数条件を扱う方法]
  2. InStr関数を使用する
    指定した文字列が含まれているかを調べるシンプルな方法です。検索位置も取得できるため、応用すれば「含まれる位置によって処理を分ける」ことも可能です。
    参考:[【VBA】(セル内)特定の文字の最初の位置を検索(InStr関数の使用方法)]

✅ Like演算子を使った判定例

たとえば、列Aのセルに「特定の文字」が含まれている場合に背景色を黄色に変更する例です。

Sub CheckCellWithLike()
    Dim ws As Worksheet
    Dim cell As Range
    
    Set ws = ThisWorkbook.Worksheets("Sheet1")
    
    For Each cell In ws.Range("A1:A10")
        If cell.Value Like "*特定の文字*" Then
            ' 特定の文字が含まれている場合の処理
            cell.Interior.Color = RGB(255, 255, 0) ' 背景色を黄色に設定
        End If
    Next cell
End Sub

解説
Like *特定の文字* では、任意の文字列の中に「特定の文字」が含まれているかを判定します。
この方法は、あらかじめパターン(ワイルドカード)を決めておくことで、似た形の文字列にも対応できるのが強みです。
参考:【VBA】フォーマット設定:数値形式・フォント・背景色の一括/条件設定]


✅ InStr関数を使った判定例

次に、InStr 関数を使った方法です。こちらは特定の文字列を含むかどうかをシンプルに確認します。

Sub CheckCellWithInStr()
    Dim ws As Worksheet
    Dim cell As Range
    
    Set ws = ThisWorkbook.Worksheets("Sheet1")
    
    For Each cell In ws.Range("A1:A10")
        If InStr(cell.Value, "特定の文字") > 0 Then
            ' 特定の文字が含まれている場合の処理
            cell.Font.Bold = True ' 太字に変更
        End If
    Next cell
End Sub

解説
InStr(cell.Value, "特定の文字") > 0 は、セルに「特定の文字」が含まれていればTrueを返します。
検索結果として0より大きい値(位置)が返れば、該当文字が含まれているということです。


✅ IF文で複数条件を処理する

実務では「特定の文字1と特定の文字2の両方を含む場合」「片方だけ含む場合」など、複数条件の分岐が必要になることも多いです。

Sub CheckCellWithMultipleConditions()
    Dim ws As Worksheet
    Dim cell As Range
    
    Set ws = ThisWorkbook.Worksheets("Sheet1")
    
    For Each cell In ws.Range("A1:A10")
        If InStr(cell.Value, "特定の文字1") > 0 And InStr(cell.Value, "特定の文字2") > 0 Then
            ' 両方の文字が含まれている場合
            cell.Interior.Color = RGB(173, 216, 230) ' 青色
        ElseIf InStr(cell.Value, "特定の文字1") > 0 Then
            ' 文字1のみ
            cell.Interior.Color = RGB(255, 255, 0) ' 黄色
        ElseIf InStr(cell.Value, "特定の文字2") > 0 Then
            ' 文字2のみ
            cell.Interior.Color = RGB(255, 182, 193) ' ピンク
        End If
    Next cell
End Sub

解説

  • Andを使って複数条件を同時に判定
  • ElseIfで条件ごとの分岐処理を明確化
  • 条件に応じてセルの書式を変えることで視覚的にわかりやすく

参考:




✅ 配列を使って複数条件を効率的に判定する

条件が増えると、If InStr(...) の繰り返しは冗長になります。そこで配列を使えば、条件が可変な場合でもコードがすっきりします。

Sub CheckCellWithArrayConditions()
    Dim ws As Worksheet
    Dim cell As Range
    Dim conditions As Variant
    Dim condition As Variant
    Dim isMatch As Boolean
    
    Set ws = ThisWorkbook.Worksheets("Sheet1")
    conditions = Array("特定の文字1", "特定の文字2", "特定の文字3")
    
    For Each cell In ws.Range("A1:A10")
        isMatch = False
        For Each condition In conditions
            If InStr(cell.Value, condition) > 0 Then
                isMatch = True
                Exit For
            End If
        Next condition
        
        If isMatch Then
            cell.Font.Color = RGB(0, 0, 255) ' フォント色を青
        End If
    Next cell
End Sub

解説

  • 配列conditionsに条件文字列をまとめて格納
  • ループで順番に判定し、最初に一致した時点で処理を実行
  • 条件追加や変更が容易になり、保守性が向上

参考:【VBA】配列(array)の1次元配列・2次元配列


✅ 注意点と実務での活用ポイント

条件判定を行う際には、次のような点に注意すると、エラーや無駄な処理を防ぎ、より堅牢なコードになります。


・ セルが空の場合の処理

セルが空のまま判定処理を実行すると、意図しない動作やエラーの原因になることがあります。
特にInStr関数では、空文字が対象の場合も0を返しますが、複数条件を組み合わせた際に不具合の元になりやすいです。

そのため、事前にセルが空かどうかを確認する条件を加えることをおすすめします。

If cell.Value <> "" Then
    ' 条件処理
End If

この一行を加えるだけで、「空白セルを無視して必要なデータだけ処理する」安全なマクロにできます。


・ 大文字・小文字の区別

InStr 関数や Like 演算子は、標準設定では大文字と小文字を区別しません。
たとえば "ABC""abc" を同じものとして判定します。

もし大文字・小文字を厳密に区別したい場合は、モジュールの先頭に以下を記載します。

Option Compare Binary

これにより、判定が厳密になり、文字の完全一致チェックが可能です。
逆に区別を不要にしたい場合は Option Compare Text を設定できます。
参考:[【VBA】Option Compare 【Binary・Text】ステートメントの設定方法]


・ 処理速度の最適化

対象範囲が広い場合、1セルずつのループ処理は処理時間が長くなります。
実務で扱うデータ量が数千行を超える場合は、以下のような工夫で速度を改善できます。

  • 処理対象範囲を絞る(必要な列・行だけを対象にする)
  • 最終行を取得して動的に範囲設定する
  • 配列に読み込んで一括処理する

これにより、マクロ実行時間が大幅に短縮され、業務効率が向上します。


✅ まとめ

セルに特定の文字が含まれているかどうかを判定し、条件ごとに処理を実行する方法は、データの検証や整理において非常に有用です。
本記事で紹介した方法を、用途やデータの性質に応じて使い分けてください。

  • Like演算子:パターンマッチングが必要な場合に便利。ワイルドカードで柔軟な検索が可能。
  • InStr関数:単純な文字列の有無を判定する場合に適用。位置情報も取得できる。
  • 複数条件の処理AndElseIf を組み合わせて分岐処理を柔軟に構築。
  • 配列による動的条件管理:条件が多い、または変動する場合に有効で保守性が高い。

これらを活用すれば、「単純な文字判定」から「複雑な条件分岐」まで幅広く対応できます。
ぜひ日々のVBA開発に取り入れ、より効率的で信頼性の高いマクロを作成してみてください。

-IF文, VBAで自動化, VBAテクニック集, VBA一覧, 文法・構文