エクセルVBAのIf文
<< エクセルVBAのIE制御に利用したステートメント一覧(VBAのIE制御入門) :前の記事
<< エクセルVBAのプログラムの制御構文(VBAの初心者入門) :前の記事
こちらは、エクセルVBAのIf~Then~Elseステートメントの解説になります。If文のような条件分岐はエクセルVBAに限らずプログラム言語全般で利用される機能ですので、しっかり覚えましょう。
また、ステートメントとは「命令文」と訳されるようにコンピュータに具体的な動作を指定する最小単位のプログラムです。主にマクロの挙動を制御する構文や文法を指します。通常は1行で完結する部分を指しますが、If~Thenなど複数行にまたがる部分を意味することもあります。
目次
- If~Then~Elseステートメントとは
- 条件式が数式のIf文サンプルコード
- 条件式がIs演算子のIf文サンプルコード
- 条件式が論理演算子のIf文サンプルコード
- 条件式が複数あるIf文サンプルコード
- If文を1行で記述するサンプルコード
- エクセルVBAのプログラム制御構文一覧
If~Then~Elseステートメントとは
If~Then~Elseステートメントは、If文に設定されている条件式を判定して、その結果が真(True)の場合はThen以降の処理を実行、偽(False)の場合はElse以降の処理を実行するフロー制御ステートメントです。
If 条件式 Then
条件式が真(True)の場合に実行される処理
Else
条件式が偽(False)の場合に実行される処理
End If
If 条件式1 Then
条件式1が真(True)の場合に実行される処理
ElseIf 条件式2 Then
条件式2が真(True)の場合に実行される処理
・・・
Else
すべての条件式が偽(False)の場合に実行される処理
End If
構文 | If condition Then [statements][Else elsestatements] | |
---|---|---|
If condition Then [statements] [ElseIf condition-n Then [elseifstatements] ... [Else [elsestatements]] End If | ||
キーワード | 省略 | 説明 |
condition | × | こちらは必須キーワードです。真偽を評価する数式または文字列式を指定します。また、比較演算子のIs演算子を利用して同じオブジェクト型(Object)であれば真(True)を返し、それ以外の場合は偽(False)を返します。 尚、引数conditionの値がNull値の場合は、偽(False)であると判断されます。 |
statements | ● | こちらは省略可能です。ただし、If文の省略形(1行で記述)の場合は、必須となりますので、注意が必要です。 例)If a > 5 Then: statements |
condition-n | ● | こちらは省略可能です。引数conditionと同様に真偽を評価する条件式を記述します。 |
elseifstatements | ● | こちらは省略可能です。引数condition-nが真(True)の場合に実行される処理になります。 |
elsestatements | ● | こちらは省略可能です。どの条件式に当てはまらない場合に実行される処理になります。 |
条件式が数式のIf文サンプルコード
Sub sample()
Dim a As Integer
a = 10
If a > 5 Then
MsgBox "変数aは5より大きい"
Else
MsgBox "変数aは5より小さい"
End If
End Sub
実行結果
解説
sampleのSubステートメントには引数の設定はされていません。まず、Dimステートメントを利用して変数aに整数型(Integer)を宣言し「10」を代入します。次にIf文の条件式を確認すると比較演算子を利用して「変数aが5より大きい」場合に真(True)を返す設定にしています。
今回は変数aに「10」を代入しており条件式に当てはまるため、If以下の「MsgBox "変数aは5より大きい"」が実行されました。最後はEndステートメントを利用してsampleプロシージャを終了させます。
こちらでは、条件式が真(True)で処理されましたが、変数aに「2」を設定すると条件式が偽(False)と判断され、Else以下の「MsgBox "変数aは5より小さい"」が実行されますのでご確認ください。
条件式がIs演算子のIf文サンプルコード
Sub sample()
Dim a As Object
Dim b As Object
Set a = Sheets("Sheet1")
Set b = Sheets("Sheet1")
If a Is b Then
MsgBox "オブジェクト変数a,bは同じオブジェクトです"
Else
MsgBox "オブジェクト変数a,bは同じオブジェクトではありません"
End If
End Sub
実行結果
解説
まず、変数a,bにオブジェクト型(Object)を宣言し両方とも「Sheet1シート」を参照しています。次にIf文の条件式を確認するとIs演算子を利用してオブジェクト変数a,bが同じオブジェクトの場合に真(True)を返す設定にしています。
今回はオブジェクト変数a,b共に「Sheet1シート」を参照しており条件式に当てはまるため、If以下の「MsgBox "オブジェクト変数a,bは同じオブジェクトです"」が実行されました。
条件式が論理演算子のIf文サンプルコード
Sub sample()
Dim a As Integer
Dim b As Integer
a = 10
b = 5
If a = 10 And b = 5 Then
MsgBox "変数aは10、変数bは5です"
Else
MsgBox "変数aは10、変数bは5ではありません"
End If
End Sub
実行結果
解説
まず、変数a,bに整数型(Integer)を宣言し変数aには「10」変数bには「5」を代入します。次にIf文の条件式を確認すると比較演算子と論理演算子が利用されており「変数aが10かつ変数bが5」の場合に真(True)を返す設定にしています。
今回は条件式に当てはまるため、If以下の「MsgBox "変数aは10、変数bは5です"」が実行されました。このように条件式には複雑な条件を付けることもできますので、条件分岐に応じて利用するようにしましょう。
条件式が複数あるIf文サンプルコード
Sub sample()
Dim a As Integer
a = 10
If a = 5 Then
MsgBox "変数aは5です"
ElseIf a = 10 Then
MsgBox "変数aは10です"
Else
MsgBox "変数aは5でも10でもありません"
End If
End Sub
実行結果
解説
まず、変数aに整数型(Integer)を宣言し「10」を代入します。次にIf文の条件式を確認すると比較演算子を利用して「変数aが5」の場合に真(True)を返す設定にしています。
今回は変数aに「10」を代入しており条件式に当てはまらないため偽(False)となりますが、次のelseIf文の条件式は「変数aが10」の場合に真(True)を返す設定になっているため、elseIf以下の「MsgBox "変数aは10です"」が実行されました。
このように上から順に条件式に当てはまるかをチェックしていき、真(True)の場合はそれ以下の処理を実行します。
If文を1行で記述するサンプルコード
Sub sample()
Dim a As Integer
a = 10
If a = 10 Then: MsgBox "変数aは10です"
End Sub
実行結果
解説
If文の処理が1つだけの場合は、1行で記述することが可能です。こちらは変数aが「10」の場合に「MsgBox "変数aは10です"」を実行するマクロになります。1行で記述する場合は、以下のようにThenに「:(コロン)」を記述し、その後ろに条件式が真(True)の場合に実行される処理を記述します。
If 条件式 Then: 条件式が真(True)の場合に実行される処理
こちらを確認してお分かりのように1行で記述する場合は、これまでに最後に記述していた「End If」は記述する必要はありません。これにより1行で記述することは可能ですが、可読性が悪くなるので省略しないようにしましょう。
また、処理が1つだけの場合に利用できますので、例えば変数aに「5」を代入して実行しても何も起こりませんので、こちらも一度ご確認ください。ちなみにこちらのサンプルコードを複数行で記述すると以下のようになります。「Else」も省略可能ですので、こちらも覚えておきましょう。
Sub sample()
Dim a As Integer
a = 10
If a = 10 Then
MsgBox "変数aは10です"
End If
End Sub
エクセルVBAのプログラム制御構文一覧
次の記事: エクセルVBAのSelect Caseステートメント >>
近田 伸矢, 植木 悠二, 上田 寛
IEのデータ収集&自動操作のプログラミング本はこの1冊だけ!IEの起動やポップアップウィンドウ、表示を制御する基本的なコードはもちろん、テキストボックスやラジオボタン、表、ハイパーリンクなどのHTML部品を制御する方法など、自動操作に欠かせないノウハウを丁寧に解説。