【Excelマクロ】条件が増えてきたら「Flag変数」を活用する

Excel VBAでデータチェックや処理分岐を作成していると、「いくつかの条件を満たしたら処理する」「どれかひとつでも条件に当てはまったら中止する」といった複数条件の判断が必要になることがあります。

最初は If ~ Then を並べるだけでも済みますが、条件が3つ4つと増えてくると、コードが見づらくなり、正しく動いているか分かりにくくなることもあります。

そこで役立つのが「Flag変数(フラグ変数)」です。ひとつの変数に「条件を満たしているかどうか」の判断結果をまとめておくことで、コードがシンプルかつ明確になります。

今回は、Flag変数の基本的な使い方と、実務でよくあるパターンを紹介します。

Flag変数の基本的な使い方

次の例では、A列の名前・B列の数値・C列の日付に対して、それぞれチェックを行い、すべての条件を満たした場合に「OK」と表示する処理です。

Sub CheckData()

    Dim ws As Worksheet
    Dim i As Long
    Dim flg As Boolean

    Set ws = ActiveSheet

    For i = 2 To ws.Cells(ws.Rows.Count, 1).End(xlUp).Row

        flg = True ' 最初はOKの前提でスタート

        ' 名前が空欄ならNG
        If ws.Cells(i, 1).Value = "" Then flg = False

        ' 数値が100未満ならNG
        If ws.Cells(i, 2).Value < 100 Then flg = False

        ' 日付が今日より未来ならNG
        If ws.Cells(i, 3).Value > Date Then flg = False

        ' 最終的な判断
        If flg = True Then
            ws.Cells(i, 4).Value = "OK"
        Else
            ws.Cells(i, 4).Value = "NG"
        End If

    Next i

End Sub

このように、flg という1つの変数を使って条件を積み重ねていくことで、条件が増えても処理の流れが把握しやすくなります。

コードのポイント

  • 最初に flg = True としておく(前提を「すべて問題なし」に)
  • 各条件で問題があれば flg = False に変更
  • 最終的に flg の状態を見て判断をまとめる

どれかひとつでも当てはまったら処理を中止したい場合

次のような「1つでも条件に当てはまったら、早めに処理を止めたい」ケースでは、flg = True を「警告あり」として使うこともできます。

Sub EarlyCheckStop()

    Dim flg As Boolean
    flg = False ' 警告はない前提

    ' 条件1:Sheet1のA1が空欄
    If Sheets("Sheet1").Range("A1").Value = "" Then flg = True

    ' 条件2:Sheet2のB2が数値でない
    If Not IsNumeric(Sheets("Sheet2").Range("B2").Value) Then flg = True

    ' 条件3:Sheet3のC3が0以下
    If Sheets("Sheet3").Range("C3").Value <= 0 Then flg = True

    ' どれかに当てはまったら処理を中断
    If flg = True Then
        MsgBox "入力内容に問題があります。"
        Exit Sub
    End If

    MsgBox "チェック完了!処理を続行します。"

End Sub

このように、先にまとめて条件を見てから、続行・中止を一括で判断できるようになります。

実装するメリット

Flag変数を使うことで得られる効果は非常に大きく、特に条件が多くなってくるほど、その効果が実感できます。

  • 条件判定をひとつの変数にまとめることで、可読性が向上する
  • 条件分岐が増えても、構造が整理されて見やすい
  • 処理の成否を True/False で明確に制御できる
  • 不具合の原因箇所を追いやすくなり、デバッグもしやすくなる
  • 同じ変数で「最初に問題ない前提」や「途中で中止」の制御ができる

Flagは小さな仕組みですが、実務での安定性と可読性を大きく高める工夫のひとつです。

まとめ

条件が複雑になってきたとき、つい If ~ Then を並べてしまいがちですが、それでは後から見ると分かりづらく、保守性が下がってしまいます。

そんなときは「Flag変数」を導入することで、処理の成否を明確に整理し、コードをわかりやすく保つことができます。

  • すべての条件をクリアしたら処理を実行
  • どれかひとつでもNGなら処理を止める

このような判定ロジックは、Flagを使えばスッキリ書けます。これからのVBA開発で、ぜひ積極的に活用してみてください。

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

上部へスクロール