Excel VBA

Excel VBA | ElseIf文の使い方をマスターする

2024年5月13日

本ページはプロモーションが含まれています

vba_elseifアイキャッチ画像

ElseIf文は、条件に応じて複数の条件分岐を行うための構文です。

If 条件1 Then
    ' 条件1がTrueの場合の処理
ElseIf 条件2 Then
    ' 条件1がFalseで条件2がTrueの場合の処理
ElseIf 条件3 Then
    ' 条件1と条件2がFalseで条件3がTrueの場合の処理
Else
    ' すべての条件がFalseの場合のデフォルト処理
End If

ElseIf文に関する主な疑問や問題点としては、以下のようなものが考えられます。

  1. 条件の書き方と構文の理解: ElseIf文の正しい書き方や、条件式の記述方法について。
  2. 複数条件の組み合わせ: 複雑な条件を効率的に扱う方法や、複数の条件が同時にTrueとなる場合の優先順位について。
  3. ElseIf文のネスト: ElseIf文をどのようにネストして使用するか、複数の条件分岐を管理する際の最適な方法について。
  4. ElseIf文の代替え手段:ElseIf文の他に代替え手段があるのか。

この記事ではこれらについても詳しく解説します。

ElseIf文の基本構文

ElseIf文は、複数の条件を順番に評価し、最初に条件を満たした場合に対応する処理を実行します。

If 条件1 Then
    ' 条件1が真の場合の処理
ElseIf 条件2 Then
    ' 条件2が真の場合の処理
ElseIf 条件3 Then
    ' 条件3が真の場合の処理
    .
    .
    .
Else
    ' いずれの条件も満たさない場合の処理
End If

コードの解説

  • 条件1 が評価され、真であればそのブロックが実行され、残りの条件は評価されません。
  • 条件1 が偽の場合、次に 条件2 が評価され、真であればそのブロックが実行され、残りの条件は評価されません。
  • 条件2 も偽の場合、次に 条件3 が評価され、真であればそのブロックが実行され、残りの条件は評価されません。
  • すべての If および ElseIf の条件が偽の場合、最後に Else ブロックが実行されます。

ElseIf文の簡単な例

以下の例は点数ごとに評価をする例です。

Sub CheckGrade()
    Dim score As Integer
    score = Range("A1").Value
    
    If score >= 90 Then
        MsgBox "成績はAです"
    ElseIf score >= 80 Then
        MsgBox "成績はBです"
    ElseIf score >= 70 Then
        MsgBox "成績はCです"
    ElseIf score >= 60 Then
        MsgBox "成績はDです"
    Else
        MsgBox "成績はFです"
    End If
End Sub

コードの解説

  • 点数の取得score = Range("A1").Value
    • 最初に、変数 score を定義し、セルA1の値を取得します。
  • 条件の評価
    • 最初のIf文(If score >= 90 Then)から始まり、順番に条件を評価します。
    • 最初の条件 score >= 90 が真の場合、「成績はAです」というメッセージが表示されます。
    • 真でない場合、次のElseIf文に進み、次の条件 score >= 80 が評価されます。
    • このプロセスが繰り返され、条件が真の場合、それに対応するメッセージが表示されます。
    • 条件が偽の場合、次のElseIf文に進み、その条件が評価されます。
    • 最後のElse節では、どの条件にも該当しない場合の処理が実行されます。
  • 結果の表示
    • 最初に評価された条件に合致する場合、それに対応するメッセージが表示されます。
    • どの条件にも合致しない場合、最後のElse節のメッセージが表示されます。

elseif文の複数条件の組み合わせ

複雑な条件や複数の条件が同時にTrueとなる場合の優先順位を効率的に扱う方法について、いくつかの方法があります。

複雑な条件の効率的な扱い方

論理演算子の適切な使用: 複数の条件を組み合わせる際に、AND (And)、OR (Or)、NOT (Not) などの論理演算子を使用して、条件を明確に組み立てます。

Dim value As Integer
value = 15

If value >= 10 And value <= 20 Then
    MsgBox "valueは10以上20以下です。"
ElseIf value > 20 Then
    MsgBox "valueは20より大きいです。"
ElseIf value < 10 Then
    MsgBox "valueは10より小さいです。"
End If

条件式の分割: 複雑な条件を複数の条件式に分割し、各条件に対応するElseIf文を使って処理します。この方法で、条件を分かりやすく管理することができます。

Dim value As Integer
value = 15

If value < 10 Then
    MsgBox "valueは10未満です。"
ElseIf value > 20 Then
    MsgBox "valueは20より大きいです。"
Else
    ' valueが10以上20以下の場合の処理
    MsgBox "valueは10以上20以下です。"
End If

複数の条件が同時にTrueとなる場合の優先順位

複数の条件が同時にTrueとなる場合、プログラムは最初にTrueとなった条件の処理ブロックを実行します。
他の条件は評価されません。

例えば、以下のような場合を考えてみます。

Dim value As Integer
value = 15

If value > 10 Then
    MsgBox "条件1がTrueです。"
ElseIf value > 5 Then
    MsgBox "条件2がTrueです。"
End If

この場合、valueが15であるため、条件1と条件2の両方がTrueとなり得ますが、最初に条件1がTrueと評価されるため、その処理ブロックが実行されます。
条件2は評価されません。

ElseIf文のネスト

ElseIf文をネストすることで、複雑な条件分岐を管理することができます。

Dim value As Integer
value = 15

If value < 10 Then
    MsgBox "valueは10未満です。"
ElseIf value >= 10 And value <= 20 Then
    ' valueが10以上20以下の場合の処理
    If value = 15 Then
        MsgBox "valueはちょうど15です。"
    ElseIf value > 15 Then
        MsgBox "valueは15より大きいですが、20以下です。"
    ElseIf value < 15 Then
        MsgBox "valueは15より小さいですが、10以上です。"
    End If
ElseIf value > 20 Then
    MsgBox "valueは20より大きいです。"
End If

コードの解説

  1. 最初の条件式 value < 10 が評価され、value が10未満の場合にメッセージボックスが表示されます。
  2. 次の条件式 value >= 10 And value <= 20 が評価され、value が10以上20以下の場合に内部の条件分岐が評価されます。
    • 内部の条件分岐では、value の具体的な値に応じてさらに詳細なメッセージが表示されます。
  3. 最後の条件式 value > 20 が評価され、value が20より大きい場合にメッセージボックスが表示されます。

ElseIf文をネストすることで、複雑な条件ロジックを柔軟に表現することができますが、可読性が低下するためあまりお勧めは出来ません。

ElseIf文の代替え手段

ElseIf文の代替手段として、Select Case文があります。
Select Case文は複数の条件に基づいて処理を分岐させる場合に便利です。

以下のElseif文をSelect Case文に変換します。

Elseif文

Dim value As Integer
value = 15

If value < 10 Then
    MsgBox "valueは10未満です。"
ElseIf value >= 10 And value <= 20 Then
    ' valueが10以上20以下の場合の処理
    If value = 15 Then
        MsgBox "valueはちょうど15です。"
    ElseIf value > 15 Then
        MsgBox "valueは15より大きいですが、20以下です。"
    ElseIf value < 15 Then
        MsgBox "valueは15より小さいですが、10以上です。"
    End If
ElseIf value > 20 Then
    MsgBox "valueは20より大きいです。"
End If

変換したSelect Case文

Dim value As Integer
value = 15

Select Case value
    Case Is < 10
        MsgBox "valueは10未満です。"
    Case 10 To 20
        ' valueが10以上20以下の場合の処理
        Select Case value
            Case 15
                MsgBox "valueはちょうど15です。"
            Case Is > 15
                MsgBox "valueは15より大きいですが、20以下です。"
            Case Is < 15
                MsgBox "valueは15より小さいですが、10以上です。"
        End Select
    Case Is > 20
        MsgBox "valueは20より大きいです。"
End Select

Select Case文の利点は、条件が多くなる場合や、特定の値や範囲に基づいた処理を分かりやすく記述できることです。
特に、同じ変数に対する複数の条件チェックや、特定の値に対する細かい条件分岐が必要な場合に便利です。

まとめ

  • 複数の条件を順番に評価し、最初に満たされる条件に対応するブロックが実行されます。
  • 複数の条件をチェックする必要がある場合、複数のIf文をネストする代わりに、ElseIf文を使用して効率的に条件分岐を行います。
  • 最後の条件に合致しない場合のデフォルトの処理を提供するために、Else節と組み合わせて使用されることが一般的です。
  • 複数の条件を効果的に処理するために使用され、コードの可読性を向上させます。
  • ネストしたElseif文も可能です。
  • Elseif文の代替え手段として、Select Case文があります。

Follow me!

-Excel VBA
-,

PAGE TOP