VBAのIF文は、条件分岐を行うための非常に重要な機能です。
プログラミングにおいて、ある条件が成立した場合と成立しなかった場合で異なる処理を行いたい場合は、IF文を使用します。
IF文は、VBA言語の基本的な構文の一つであり、初心者から上級者まで幅広く利用されています。
本記事では、IF文の基本的な使い方から、より高度な応用例まで、詳しく解説していきます。
IF文とは?
「IF文」とは、プログラムにおいてある条件が成立した場合に実行する処理と、成立しなかった場合に実行する処理を切り替えるための制御文のことです。VBAにおいても、IF文は非常に基本的な機能の一つとして使われています。
例えば、「もしAがBより大きければ、Cを表示する」という処理をする場合、IF文を用いることができます。この場合、AがBより大きいかどうかを判定し、その結果に応じてCを表示するかどうかを決定します。
IF文を使用することで、ある条件が成立した場合と成立しなかった場合で異なる処理を行うことができるため、プログラムの柔軟性が高まります。IF文をうまく活用することで、プログラムの効率性や信頼性を高めることができます。
IF文の基本的な書き方
IF文の基本的な書き方は、以下のようになります。
1 2 3 4 5 |
If 条件 Then 条件が真の場合に実行する処理 Else 条件が偽の場合に実行する処理 End If |
上記の書き方では、If
キーワードを使用して条件を指定します。
その後に、Then
キーワードを使用して条件が成立した場合に実行する処理を指定します。条件が成立しなかった場合に実行する処理は、Else
キーワードを使用して指定します。
条件が成立した場合に実行する処理が1行のみであれば、以下のように1行で記述することもできます。
1 |
If 条件 Then 実行する処理 |
また、Else
以下の処理を省略することも可能です。
この場合、条件が成立しなかった場合に何も処理を行わないため、エラーにつながることがあるため注意が必要です。
IF文のネスト
IF文にはネスト(入れ子構造)を組み合わせることができます。
ネストを使うことで、より複雑な条件分岐を表現することができます。
例えば、以下のようなコードを考えてみましょう。
1 2 3 4 5 6 7 8 9 |
If A > B Then If A > C Then MsgBox "AはBとCの両方よりも大きいです。" Else MsgBox "AはBよりも大きく、C以下です。" End If Else MsgBox "AはB以下です。" End If |
上記のコードでは、AがBより大きい場合には、更にAがCより大きいかどうかを判定しています。
AがBより大きいがCより小さい場合には、「AはBよりも大きく、C以下です。」というメッセージが表示されます。
また、AがB以下の場合には、「AはB以下です。」というメッセージが表示されます。
ネストを使用することで、複雑な条件分岐を表現することができますが、コードが複雑になりやすいため、適切な場面で使用するよう注意が必要です。
また、ネストが深くなりすぎると可読性が悪くなるため、できるだけ浅いネストで表現するようにすると良いでしょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
If A > B Then If A > C Then If A > D Then MsgBox "AはB、C、Dのすべてよりも大きいです。" Else MsgBox "AはB、Cには大きく、Dには小さいです。" End If ElseIf A < C Then If A > D Then MsgBox "AはBには大きく、Cには小さく、Dには大きいです。" Else MsgBox "AはBには大きく、Cには小さく、Dにも小さいです。" End If Else MsgBox "AはBには大きく、Cには等しいです。" End If Else If A > C Then If A > D Then MsgBox "AはBよりは小さく、C、Dよりも大きいです。" Else MsgBox "AはBよりは小さく、Cには大きく、Dには小さいです。" End If ElseIf A < C Then If A > D Then MsgBox "AはBよりは小さく、Cには小さく、Dには大きいです。" Else MsgBox "AはBよりは小さく、C、Dには小さいです。" End If Else MsgBox "AはB以下であり、かつCに等しいです。" End If End If |
上記のコードでは、4つの変数A、B、C、Dの大小関係を全て考慮し、それぞれの条件に応じて異なるメッセージを表示するようになっています。
IF文と比較演算子
比較演算子(comparison operators)は、プログラミング言語において、値の大小関係や等しいかどうかを比較するために使用される記号や文字列のことを指します。VBAにおいては、以下の比較演算子が使用されます。
- 等しいかどうかを比較するための
=
演算子 - 等しくないかどうかを比較するための
<>
演算子 - 左辺が右辺よりも大きいかどうかを比較するための
>
演算子 - 左辺が右辺以上かどうかを比較するための
>=
演算子 - 左辺が右辺よりも小さいかどうかを比較するための
<
演算子 - 左辺が右辺以下かどうかを比較するための
<=
演算子
これらの演算子は、IF文の条件式に使用することができます。例えば、以下のように書くことができます。
「<>」(異なる)演算子
1 2 3 4 5 6 |
Dim a As Integer a = 10 If a <> 5 Then MsgBox "aは5ではありません。" End If |
「>=」(以上)演算子
1 2 3 4 5 6 |
Dim a As Integer a = 10 If a >= 5 Then MsgBox "aは5以上です。" End If |
「<=」(以下)演算子
1 2 3 4 5 6 |
Dim a As Integer a = 10 If a <= 15 Then MsgBox "aは15以下です。" End If |
また、上記の論理演算子と比べると登場回数は少ないですが
- Like演算子:文字列をパターンマッチングして比較するための演算子です。例えば、文字列 “apple” が “a*” というパターンにマッチするかどうかを判断することができます。
- Is演算子:オブジェクトが同じインスタンスであるかどうかを比較するための演算子です。例えば、オブジェクト変数AとBが同じオブジェクトを指しているかどうかを判断することができます。
これらの演算子も比較処理に使用出来ます。
サンプルコードを確認しましょう。
Like演算子の使用例
1 2 3 4 5 6 7 |
Dim str2 As String str2 = "apple" If str2 Like "a?ple" Then MsgBox "str2は'a?ple'と一致します。" Else MsgBox "str2は'a?ple'と一致しません。" End If |
このVBAコードは、文字列を比較演算子 Like を使って比較する例です。
まず、変数 str2 に “apple” という文字列を代入します。
その後、If 文を用いて、文字列 str2 が “a?ple” というパターンに一致するかどうかを判定します。Like 演算子は、? というワイルドカードを使って、任意の1文字に一致することができます。
条件式が成立した場合は、”str2は’a?ple’と一致します。”というメッセージボックスが表示され、成立しなかった場合は、”str2は’a?ple’と一致しません。”というメッセージボックスが表示されます。
この例では、変数に代入された文字列とパターンの一致を確認することができます。Like 演算子は文字列比較に幅広く使われるため、覚えておくと便利です。
Is演算子の使用例
1 2 3 4 5 6 7 |
Dim str1 As String str1 = "Hello" If str1 Is Nothing Then MsgBox "str1はNothingです。" Else MsgBox "str1は" & str1 & "です。" End If |
このVBAコードは、変数 str1
に文字列 “Hello” を代入し、その後、If
文で str1
が Nothing
であるかどうかをチェックしています。Is
演算子は、左辺と右辺が同じオブジェクトを参照している場合に True
を返します。
str1
には文字列が代入されているため、If
文の条件式は False
となり、Else
以下の処理が実行されます。MsgBox
関数は、str1
に格納されている文字列 “Hello” を表示します。したがって、このコードは “str1はHelloです。” というメッセージボックスを表示します。
IF文と論理演算子
論理演算子とは、論理値(真偽値)を扱う際に使用される演算子のことです。論理値は真(True)または偽(False)の2つの値をとります。論理演算子は、複数の論理値を組み合わせて、新しい論理値を求めるために使用されます。
論理演算子には、以下の3つがあります。
- And演算子:2つの論理値がともに真である場合に、真を返します。それ以外の場合は、偽を返します。
- Or演算子:2つの論理値のうち、少なくとも1つが真である場合に、真を返します。それ以外の場合は、偽を返します。
- Not演算子:論理値を反転させます。真を偽に、偽を真に変換します。
【論理演算子のサンプルコード】
以下は、論理演算子を使用したサンプルコードです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
Dim A As Integer Dim B As Integer A = 5 B = 10 If A > 0 And B < 20 Then MsgBox "Aは0より大きく、Bは20より小さいです。" End If If A > 0 Or B > 20 Then MsgBox "Aは0より大きいか、Bは20より大きいです。" End If If Not A < 0 Then MsgBox "Aは0以下ではありません。" End If |
最初のIf文では、And演算子を使用して、Aが0より大きくかつBが20より小さい場合に、メッセージボックスを表示します。
次のIf文では、Or演算子を使用して、Aが0より大きい場合またはBが20より大きい場合に、メッセージボックスを表示します。
最後のIf文では、Not演算子を使用して、Aが0未満でない場合に、メッセージボックスを表示します。
論理演算子を使用することで、複雑な条件判定を簡潔に表現することができます。
3つ以上の条件
「vba if 複数条件 and 3つ以上」、「vba if 複数条件 or 3つ以上」というサジェストとよく見かけます。
条件が3つ以上の場合でも基本的な考え方は同じです。
1 2 3 4 5 |
If 条件1 And 条件2 And 条件3 Then '条件が全て成立した場合の処理 Else '条件が1つでも成立しなかった場合の処理 End If |
エラー処理におけるIF文の活用
エラー処理はプログラム実行中に発生したエラーを適切に処理することで、プログラムの安定性を確保するために欠かせないものです。
VBAでは、エラーが発生した際に実行するエラーハンドラを作成することができます。
IF文を活用して、エラー発生の有無に応じて処理を分岐させることができます。
以下に、エラー処理におけるIF文の活用例を示します。
1 2 3 4 5 6 7 8 9 10 11 |
On Error Resume Next ' エラーが発生する可能性のある処理 Dim i As Integer i = 1 / 0 ' エラーが発生した場合の処理 If Err.Number <> 0 Then MsgBox "エラーが発生しました。エラーメッセージ:" & Err.Description Err.Clear End If |
まず、On Error Resume Next
でエラーが発生しても処理を続行するように設定します。その後、エラーが発生する可能性のある処理を記述します。この場合、0で割り算を行っているため、エラーが発生します。
その後、If Err.Number <> 0 Then
で、エラーが発生した場合に実行する処理を指定します。Err.Number
は、発生したエラーの番号を表し、0以外の値が設定されます。そのため、Err.Number <> 0
という条件式で、エラーが発生した場合に実行するブロックを指定します。
上記の例では、エラーメッセージを表示するMsgBox
を実行し、Err.Clear
でエラー情報をクリアしています。
このように、IF文を活用して、エラーが発生した場合に実行する処理を分岐させることができます。
条件に該当しない場合、何も処理を行わない
「VBA IF 何もしない」という検索が多いため、このようなケースを解説します。
難しく考える必要はなく、VBAのIf文において、条件に該当しない場合に何も処理を行わない方法は、If文のブロック内に何も処理を書かずに、単にEnd Ifを書きます。
以下は、サンプルコードです。
Sub サンプル()
Dim num As Integer
num = 10
1 2 3 4 5 6 7 8 9 10 11 |
If num > 5 Then '条件に該当する場合に実行する処理を記述する MsgBox "numは5よりも大きいです。" End If If num > 20 Then '条件に該当しない場合は何もしない End If 'If文を抜けた後の処理を記述する MsgBox "コードの最後に到達しました。" |
End Sub
この例では、最初のIf文の条件が成立するため、「numは5よりも大きいです。」というメッセージボックスが表示されます。
しかし、2つ目のIf文の条件は成立しないため、何も処理を行わずにIf文を抜けます。最後に、「コードの最後に到達しました。」というメッセージボックスが表示されます。
IF文の注意点
最後にIF文の注意点を確認しておきましょう。
- 条件式を複雑にしすぎないこと IF文の条件式が複雑になりすぎると、コードの読みやすさや保守性が低下することがあります。
また、条件分岐を分かりにくくする原因にもなります。条件式が複雑になる場合は、別の方法を検討することが必要です。 - Else節を必要な場合に忘れずに記述すること IF文で条件が満たされない場合の処理を記述するElse節を、必要な場合には必ず記述するようにしましょう。
Else節を省略すると、条件が満たされなかった場合に何も処理が実行されず、想定しない結果が発生する可能性があります。 - エラー処理でのIF文の活用に注意すること エラー処理でIF文を活用する場合、エラーが発生しない場合に実行される処理も記述する必要があります。
エラー処理が完了した後に、正常に処理が続行されるようにするためです。
また、エラーが発生しなかった場合に実行される処理が長くなる場合は、SubプロシージャやFunctionプロシージャとして切り出すなど、処理を簡素化することも必要です。
コメント