この記事では、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演算子などがあります。
演算子の詳細は下記の記事で解説していますので、記事を参考に演算子の使い方を理解して、さまざまな条件を設定できるようになりましょう。
概要解説に戻る