ous">

小さな在庫管理

在庫管理導入からシステム作成まで詳細解説!

VBA 条件分岐 Ifステートメントについて詳細解説! [VBA関連解説#08]

この記事では、VBAでの条件分岐に使用する、Ifステートメントの使用方法を解説します。

基本構文から、Elseif・Else を使った複数条件や、ネスト(入れ子)構造の記述方法を解説します。
また、Goto・Exit Sub ステートメントなど、後続処理をスキップする方法についても解説していきます。

*IfステートメントはIf文とも呼ばれますが、この記事ではIfステートメントと表記します。


VBA関連解説

Ifステートメントの構文

VBAでは、条件によって処理を変えたい場合に、Ifステートメントがよく使用されます。

基本的な記述方法から、複数条件・ネストまで、例示しながら解説していきます。
 

1条件:1処理

1つの条件を判定し、真:True の時に処理を実行します。
最も基本の構文です。

If_Then 構文

If 条件1 Then
    条件1が真の時の処理1
End If

If_Then 例

Dim num as Long
num = 1

If num = 1 Then
    MsgBox "数は1です。"
End If

"数は1です。" が表示されます。


 

1条件:2処理

1つの条件を判定し、真:True と偽:False の時にそれぞれの処理を実行します。
Elseの後に偽の時の処理を書きます。

If_Then_Else 構文

If 条件1 Then
    条件1が真の時の処理1
Else
    条件1が偽の時の処理2
End If

If _Then_Else 例

Dim num as Long
num = 2

If num = 1 Then
    MsgBox "数は1です。"
Else
    MsgBox "数は1ではありません。"
End If

"数は1ではありません。" が表示されます。


 

2条件:2処理

2つの条件を判定し、真:True の時にそれぞれの処理を実行します。
ElseIfの後に条件を追加します。

If_Then_ElseIf 構文

If 条件1 Then
    条件1が真の時の処理1
ElseIf 条件2 Then
    条件2が真の時の処理2
End If

If_Then_ElseIf 例

Dim num as Long
num = 2

If num = 1 Then
    MsgBox "数は1です。"
ElseIf num = 2 Then
    MsgBox "数は2です。"
End If

"数は2です。" が表示されます。


 

2条件:3処理

2つの条件を判定し、真:True の時にそれぞれの処理を実行します。さらに、偽:False の時に別の処理を実行します。
ElseIfの後に条件を追加します。Elseの後に偽の時の処理を書きます。

If_Then_ElseIf_Else 構文

If 条件1 Then
    条件1が真の時の処理1
ElseIf 条件2 Then
    条件2が真の時の処理2
Else
    条件1・2が偽の時の処理3
End If

If_Then_ElseIf_Else 例

Dim num as Long
num = 3

If num = 1 Then
    MsgBox "数は1です。"
ElseIf num = 2 Then
    MsgBox "数は2です。"
Else
    MsgBox "数は1・2ではありません。"
End If

"数は1・2ではありません。" が表示されます。


 

複数条件

複数の条件を判定し、真:True の時にそれぞれの処理を実行します。さらに、偽:False の時に別の処理を実行します。
ElseIfの後に条件を追加していきます。Elseの後に偽の時の処理を書きます。

If_Then_ElseIf_Else 構文

If 条件1 Then
    条件1が真の時の処理1
ElseIf 条件2 Then
    条件2が真の時の処理2
ElseIf 条件3 Then
    条件3が真の時の処理3
ElseIf 条件4 Then
    条件4が真の時の処理4
Else
    条件1・2・3・4が偽の時の処理5
End If

If_Then_ElseIf_Else 例

Dim num as Long
num = 5

If num = 1 Then
    MsgBox "数は1です。"
ElseIf num = 2 Then
    MsgBox "数は2です。"
ElseIf num = 3 Then
    MsgBox "数は3です。"
ElseIf num = 4 Then
    MsgBox "数は4です。"
Else
    MsgBox "数は1・2・3・4ではありません。"
End If

"数は1・2・3・4ではありません。" が表示されます。


 

ネスト(入れ子)

Ifステートメントの条件の中で、さらに条件分岐をすることをネスト(入れ子)といいます。
条件処理の中で、さらに条件を判定し、真:True の時にそれぞれの処理を実行します。
Ifステートメントの中にIfステートメントを追加していきます。

If_(If_Then_ElseIf)_Then_ElseIf_(If_Then_ElseIf)_Else 構文

If 条件1 Then
    If 条件3 Then
        条件1・3が真の時の処理1
    ElseIf 条件4 Then
         条件1・4が真の時の処理2
    End If
ElseIf 条件2 Then
    If 条件5 Then
        条件2・5が真の時の処理3
    ElseIf 条件6 Then
        条件2・6が真の時の処理4
    End If
Else
    条件1・2が偽の時の処理5
End If

If_(If_Then_ElseIf)_Then_ElseIf_(If_Then_ElseIf)_Else  例

Dim num as Long
num = 3

If num < 3 Then
    If num = 1 Then
        MsgBox "数は1です。"
    ElseIf num = 2 Then
        MsgBox "数は2です。"
    End If
ElseIf num > 3 Then
    If num = 4 Then
        MsgBox "数は4です。"
    ElseIf num = 5 Then
        MsgBox "数は5です。"
    End If
Else
    MsgBox "数は3です。"
End If

"数は3です。" が表示されます。

 

後続処理をスキップする方法

GoToステートメント

GoToステートメントは、GoTo後述の処理名:の記述部分まで、プログラムをスキップさせる構文です。

If_(GoTo)_Then 構文

Sub TEST()
If 条件1 Then
    GoTo 処理名        '→ここからスキップ
End If

後続処理

処理名:
    処理1                  '←ここまでスキップ
End Sub

GoToステートメントは、Ifステートメントと組み合わせて使われ、条件が成り立った場合に、後続処理を飛ばして、処理名:の記述部分までスキップします。

GoToステートメントは、GoTo記述の前にもスキップできますが、処理が分離してしまうので、可読性の観点からも、適度な使用をこころがけましょう。
 

Exit Sub ステートメント

Exit Subステートメントは、プロシージャを抜けてサブプロシージャの呼び出し元にスキップさせる構文です。End Subにスキップするのではなく、プロシージャ自体を抜けます。

If_(Exit Sub)_Then 構文

Sub TEST()
If 条件1 Then
    Exit Sub        '→ここからスキップ
End If

後続処理

End Sub
                        '←ここまでスキップ

Exit Subステートメントは、Ifステートメントと組み合わせて使われ、条件が成り立った場合に、後続処理を飛ばして、プロシージャ自体も抜けます。

異常値の回避判定の時などに、よく使用されます。
 

注意点等

詳細にわたり注意点等を確認していきます。

1行構文

Ifステートメントは、条件と処理を1行にまとめて記述することができます。

If_Then 構文1

If 条件1 Then
    条件1が真の時の処理1
End If

1条件:1処理の基本構文を1行にまとめて記述すると、構文2のようになり、End If は必要ありません。

If_Then 構文2

If 条件1 Then 条件1が真の時の処理1

構文1をブロック形式、構文2を1行形式と呼びます。1行形式で記述できるのは、処理命令が単独の場合だけです。

ただし1行形式は、デバック時に 条件に問題があるのか 処理に問題があるのかが判り難いことと、可読性の観点からも、あまり使用せずにブロック形式で記述していきましょう。
 

複数条件の可読性

Ifステートメントは、条件が増えてくると可読性が低下していきます。

インデントを有効に使用したり、変数やサブプロシージャを活用して処理部分の記述を短くし、可読性を上げていきましょう。ネストについても、多くても3階層ぐらいに留めましょう。

また、複数条件の場合に可読性をあげるには、Select Caseステートメントを使用する方法もあります。

下記の記事では、VBAでの条件分岐に使用する、Select Caseステートメントの使用方法を解説していますので、参考にしてください。

演算子

Ifステートメントの構文例ででてきた、"=" や "<" などは演算子とよばれ、値の比較などに使われます。

演算子には、"=" "<" などの比較演算子、その他、算術演算子や論理演算子、文字列比較に使われるLike演算子などがあります。

演算子の詳細は下記の記事で解説していますので、記事を参考に演算子の使い方を理解して、さまざまな条件を設定できるようになりましょう。

 

概要解説に戻る