プログラミングでは、条件分岐によって「もし○○ならば◇◇する」というような条件分岐を実現できます。この記事では、VBA(Visual Basic for Applications)におけるIf文の基本文法から実務的な活用例まで紹介します。
基本文法の解説
VBAにおけるIf文は、条件式の真偽によって実行する処理を切り替えるための構文です。 (VBAのIF文とIIF文:初心者向けガイド | 縁紡ぐ)まずは、If文の基本的な書き方と動作を確認しましょう。
If~Then の基本形
If文の最もシンプルな形は「If 条件 Then」です。条件が満たされた場合に続く処理を実行し、満たされなければ何もせずに次の行へ進みます。 (If...Then...Else ステートメントを使用する (VBA) | Microsoft Learn)
If 条件 Then
' 条件が真(True)の場合の処理
End If
上記のように書きます。例えば、変数xが0より大きい場合にメッセージを表示する簡単な例は次の通りです。
Dim x As Integer
x = 5
If x > 0 Then
MsgBox "xは0より大きいです"
End If
条件式x > 0がTrue(真)であれば、MsgBoxによるメッセージ表示が実行されます。条件式がFalse(偽)の場合は、If~End Ifブロック内の処理はスキップされ、後続のコードへ進みます (If...Then...Else ステートメントを使用する (VBA) | Microsoft Learn)。なお、Ifを使用するときは必ず対応するEnd Ifで閉じる必要があります(閉じ忘れるとエラーになります) (初心者でもわかるExcelマクロ入門! Ifを使ったマクロの使い方をマスター | 4時間のエクセル仕事は20秒で終わる | ダイヤモンド・オンライン)。
If~Then~Else での条件分岐
If文に**Else節**を加えると、条件が満たされなかった場合の処理を指定できます。 (初心者でもわかるExcelマクロ入門! Ifを使ったマクロの使い方をマスター | 4時間のエクセル仕事は20秒で終わる | ダイヤモンド・オンライン)これにより、「条件がTrueなら~、Falseなら~」という二者択一の分岐処理が書けます。
If 条件 Then
' 条件がTrueの場合の処理
Else
' 条件がFalseの場合の処理
End If
例えば、変数scoreの値で合否を判定する場合を考えてみます。scoreが60以上なら合格メッセージを表示し、それ以外なら不合格メッセージを表示するには次のように書けます。
Dim score As Integer
score = 65
If score >= 60 Then
MsgBox "合格です!"
Else
MsgBox "不合格です。"
End If
上記の例では、条件式score >= 60が真であれば「合格です!」と表示し、偽であれば「不合格です。」と表示します。Else節を用いることで、条件を満たさない場合にも明示的に処理を指定できるため、どちらの場合でも必ず何らかの処理が実行される構造になります。 (If...Then...Else ステートメントを使用する (VBA) | Microsoft Learn)
ElseIf を使った複数条件の分岐
さらに、ElseIf句を使うと条件を追加して複数パターンに応じた処理分岐が可能です (VBAのIF文とIIF文:初心者向けガイド | 縁紡ぐ)。ElseIfは「もし最初の条件がFalseだったら、別の条件を評価し・・・」という形で順に条件をチェックしていきます (If...Then...Else ステートメントを使用する (VBA) | Microsoft Learn)。構文は次のとおりです。
If 条件1 Then
' 条件1がTrueの場合の処理
ElseIf 条件2 Then
' 条件1がFalseで条件2がTrueの場合の処理
Else
' 上記いずれの条件もFalseの場合の処理
End If
ElseIfは必要なだけ複数回使用でき、上から順に条件を判定します。最初にTrueになった条件のブロックを実行したら、以降のElseIfやElseはスキップされ、End Ifの次へ抜けます (If...Then...Else ステートメントを使用する (VBA) | Microsoft Learn)。もし全ての条件がFalseであれば、最後のElseブロックの処理が実行されます。 (If...Then...Else ステートメントを使用する (VBA) | Microsoft Learn)
具体例として、テストの点数scoreに応じて評価を変える場合を考えてみましょう (VBAのIF文とIIF文:初心者向けガイド | 縁紡ぐ)。点数が90以上なら「優」、75以上なら「良」、60以上なら「可」、それ未満は「不合格」と表示するコードは以下のように書けます。
Dim score As Integer
score = 75
If score >= 90 Then
MsgBox "優"
ElseIf score >= 75 Then
MsgBox "良"
ElseIf score >= 60 Then
MsgBox "可"
Else
MsgBox "不合格"
End If
このように複数の条件を連ねることで、段階的な条件分岐を表現できます。実行時には上から順に条件を評価し、当てはまった箇所の処理だけが実行されます(この例ではscore=75なので「良」が表示されます) (VBAのIF文とIIF文:初心者向けガイド | 縁紡ぐ)。
条件分岐の処理フロー(例)
ElseIfを含む条件分岐の流れを、簡単な例で表に整理してみましょう。以下は「条件1」「条件2」という2つの条件を持つIf~ElseIf~Else構造において、各条件の真偽によってどのブロックが実行されるかを示したものです。
条件1の判定 | 条件2の判定 | 実行される処理ブロック |
|---|---|---|
True(成立) | (※条件2は検査せず) | Thenブロックの処理を実行 |
False(不成立) | True(成立) | ElseIfブロックの処理を実行 |
False(不成立) | False(不成立) | Elseブロックの処理を実行 |
上の表のとおり、まず条件1を評価し、成立した場合はその時点で処理が確定します。条件1が不成立の場合に限り条件2の評価に進み、条件2が成立すればその処理を実行、不成立なら最後のElse処理を実行します。これが基本的なIf~ElseIf~Elseによる分岐処理の流れです。
実務的なサンプルコード
それでは、実際の業務で役立つIf文の使用例を見てみましょう。ここでは、シンプルな例と、実務シナリオを想定した例の2つを紹介します。コードはVBAエディタにコピーして実行できます。それぞれのコードについて、後でステップごとに解説します。
シンプルなIf文の例
まずは基本的なIf/Elseの例です。変数に格納された数値に応じてメッセージを表示するマクロを作ってみます。
Sub CheckScore()
Dim score As Integer
score = 45 ' テストの点数
If score >= 60 Then
MsgBox "合格です!" ' 条件を満たす場合
Else
MsgBox "不合格です。" ' 条件を満たさない場合
End If
End Sub
このマクロCheckScoreでは、変数scoreの値が60以上かどうかをIf文で判定し、結果に応じて**「合格です!」または「不合格です。」**というメッセージボックスを表示します。scoreが例えば45の場合は条件がFalseなのでElse側が実行され、「不合格です。」と表示されます。値を変えて試すことで、If文の基本的な動作を確認できます。
データのバリデーションを行う活用例
次に、ユーザー入力の妥当性をチェックして処理を分岐する実践的な例を紹介します。ユーザーに数値入力を求め、入力が空か・数値でないか・範囲外かによってそれぞれエラーメッセージを出し、問題なければ処理を続行するマクロです。
Sub ValidateInput()
Dim userInput As String
userInput = InputBox("0~100の数値を入力してください:")
' ①空入力のチェック
If userInput = "" Then
MsgBox "入力が必要です。"
Exit Sub ' 処理を中断
End If
' ②数値かどうかチェック
If Not IsNumeric(userInput) Then
MsgBox "数値を入力してください。"
Exit Sub ' 処理を中断
End If
' ③数値の範囲チェック
If CInt(userInput) < 0 Or CInt(userInput) > 100 Then
MsgBox "入力値は0から100の範囲である必要があります。"
Exit Sub ' 処理を中断
End If
' ここまで全てのチェックを通過した場合のみ実行
MsgBox "入力された数値は " & userInput & " です。"
End Sub
このValidateInputマクロでは、InputBoxでユーザーに入力を求めています。続く複数のIf文で入力値を順番に検証し、各チェックで問題があればメッセージを表示してExit Subでマクロの処理自体を終了しています。例えば何も入力せずOKした場合は①の条件がTrueとなり「入力が必要です。」と表示して終了します。一方、適切な数値(例:50)が入力された場合は全てのIf条件がFalseとなり、最後に入力値を確認するメッセージが表示されます。
このように複数の独立した条件チェックを行う場合、ElseIfを使った一つの大きな条件分岐にするよりも、上記のように個別のIfで早めに不正入力時の処理を抜けてしまう方が見通しが良くなります。 (VBAのIF文とIIF文:初心者向けガイド | 縁紡ぐ)(各チェックごとに処理が中断されるため、後続の無駄な評価も行わずに済みます。)実務では入力チェックやエラー検証の場面で頻出するパターンなので、ぜひ覚えておきましょう。





