VBA初心者必見!IF文で条件分岐をする方法

VBAのIF文は、条件分岐を行うための非常に重要な機能です。
プログラミングにおいて、ある条件が成立した場合と成立しなかった場合で異なる処理を行いたい場合は、IF文を使用します。
IF文は、VBA言語の基本的な構文の一つであり、初心者から上級者まで幅広く利用されています。
本記事では、IF文の基本的な使い方から、より高度な応用例まで、詳しく解説していきます。

IF文とは?

「IF文」とは、プログラムにおいてある条件が成立した場合に実行する処理と、成立しなかった場合に実行する処理を切り替えるための制御文のことです。VBAにおいても、IF文は非常に基本的な機能の一つとして使われています。

例えば、「もしAがBより大きければ、Cを表示する」という処理をする場合、IF文を用いることができます。この場合、AがBより大きいかどうかを判定し、その結果に応じてCを表示するかどうかを決定します。

IF文を使用することで、ある条件が成立した場合と成立しなかった場合で異なる処理を行うことができるため、プログラムの柔軟性が高まります。IF文をうまく活用することで、プログラムの効率性や信頼性を高めることができます。

IF文の基本的な書き方

IF文の基本的な書き方は、以下のようになります。

上記の書き方では、Ifキーワードを使用して条件を指定します。

その後に、Thenキーワードを使用して条件が成立した場合に実行する処理を指定します。条件が成立しなかった場合に実行する処理は、Elseキーワードを使用して指定します。

条件が成立した場合に実行する処理が1行のみであれば、以下のように1行で記述することもできます。

また、Else以下の処理を省略することも可能です。

この場合、条件が成立しなかった場合に何も処理を行わないため、エラーにつながることがあるため注意が必要です。

IF文のネスト

IF文にはネスト(入れ子構造)を組み合わせることができます。
ネストを使うことで、より複雑な条件分岐を表現することができます。

例えば、以下のようなコードを考えてみましょう。

上記のコードでは、AがBより大きい場合には、更にAがCより大きいかどうかを判定しています。
AがBより大きいがCより小さい場合には、「AはBよりも大きく、C以下です。」というメッセージが表示されます。

また、AがB以下の場合には、「AはB以下です。」というメッセージが表示されます。

ネストを使用することで、複雑な条件分岐を表現することができますが、コードが複雑になりやすいため、適切な場面で使用するよう注意が必要です。
また、ネストが深くなりすぎると可読性が悪くなるため、できるだけ浅いネストで表現するようにすると良いでしょう。

上記のコードでは、4つの変数A、B、C、Dの大小関係を全て考慮し、それぞれの条件に応じて異なるメッセージを表示するようになっています。

IF文と比較演算子

比較演算子(comparison operators)は、プログラミング言語において、値の大小関係や等しいかどうかを比較するために使用される記号や文字列のことを指します。VBAにおいては、以下の比較演算子が使用されます。

  • 等しいかどうかを比較するための =演算子
  • 等しくないかどうかを比較するための <>演算子
  • 左辺が右辺よりも大きいかどうかを比較するための >演算子
  • 左辺が右辺以上かどうかを比較するための >=演算子
  • 左辺が右辺よりも小さいかどうかを比較するための <演算子
  • 左辺が右辺以下かどうかを比較するための <=演算子

これらの演算子は、IF文の条件式に使用することができます。例えば、以下のように書くことができます。

「<>」(異なる)演算子

「>=」(以上)演算子

「<=」(以下)演算子

また、上記の論理演算子と比べると登場回数は少ないですが

  • Like演算子:文字列をパターンマッチングして比較するための演算子です。例えば、文字列 “apple” が “a*” というパターンにマッチするかどうかを判断することができます。
  • Is演算子:オブジェクトが同じインスタンスであるかどうかを比較するための演算子です。例えば、オブジェクト変数AとBが同じオブジェクトを指しているかどうかを判断することができます。

これらの演算子も比較処理に使用出来ます。

サンプルコードを確認しましょう。

Like演算子の使用例

このVBAコードは、文字列を比較演算子 Like を使って比較する例です。

まず、変数 str2 に “apple” という文字列を代入します。

その後、If 文を用いて、文字列 str2 が “a?ple” というパターンに一致するかどうかを判定します。Like 演算子は、? というワイルドカードを使って、任意の1文字に一致することができます。

条件式が成立した場合は、”str2は’a?ple’と一致します。”というメッセージボックスが表示され、成立しなかった場合は、”str2は’a?ple’と一致しません。”というメッセージボックスが表示されます。

この例では、変数に代入された文字列とパターンの一致を確認することができます。Like 演算子は文字列比較に幅広く使われるため、覚えておくと便利です。

Is演算子の使用例

このVBAコードは、変数 str1 に文字列 “Hello” を代入し、その後、If 文で str1Nothing であるかどうかをチェックしています。Is 演算子は、左辺と右辺が同じオブジェクトを参照している場合に True を返します。

str1 には文字列が代入されているため、If 文の条件式は False となり、Else 以下の処理が実行されます。MsgBox 関数は、str1 に格納されている文字列 “Hello” を表示します。したがって、このコードは “str1はHelloです。” というメッセージボックスを表示します。

IF文と論理演算子

論理演算子とは、論理値(真偽値)を扱う際に使用される演算子のことです。論理値は真(True)または偽(False)の2つの値をとります。論理演算子は、複数の論理値を組み合わせて、新しい論理値を求めるために使用されます。

論理演算子には、以下の3つがあります。

  1. And演算子:2つの論理値がともに真である場合に、真を返します。それ以外の場合は、偽を返します。
  2. Or演算子:2つの論理値のうち、少なくとも1つが真である場合に、真を返します。それ以外の場合は、偽を返します。
  3. Not演算子:論理値を反転させます。真を偽に、偽を真に変換します。

【論理演算子のサンプルコード】

以下は、論理演算子を使用したサンプルコードです。

最初の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つ以上の場合でも基本的な考え方は同じです。

エラー処理におけるIF文の活用

エラー処理はプログラム実行中に発生したエラーを適切に処理することで、プログラムの安定性を確保するために欠かせないものです。

VBAでは、エラーが発生した際に実行するエラーハンドラを作成することができます。
IF文を活用して、エラー発生の有無に応じて処理を分岐させることができます。

以下に、エラー処理における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

End Sub

この例では、最初のIf文の条件が成立するため、「numは5よりも大きいです。」というメッセージボックスが表示されます。

しかし、2つ目のIf文の条件は成立しないため、何も処理を行わずにIf文を抜けます。最後に、「コードの最後に到達しました。」というメッセージボックスが表示されます。

IF文の注意点

最後にIF文の注意点を確認しておきましょう。

  1. 条件式を複雑にしすぎないこと IF文の条件式が複雑になりすぎると、コードの読みやすさや保守性が低下することがあります。

    また、条件分岐を分かりにくくする原因にもなります。条件式が複雑になる場合は、別の方法を検討することが必要です。
  2. Else節を必要な場合に忘れずに記述すること IF文で条件が満たされない場合の処理を記述するElse節を、必要な場合には必ず記述するようにしましょう。

    Else節を省略すると、条件が満たされなかった場合に何も処理が実行されず、想定しない結果が発生する可能性があります。
  3. エラー処理でのIF文の活用に注意すること エラー処理でIF文を活用する場合、エラーが発生しない場合に実行される処理も記述する必要があります。

    エラー処理が完了した後に、正常に処理が続行されるようにするためです。
    また、エラーが発生しなかった場合に実行される処理が長くなる場合は、SubプロシージャやFunctionプロシージャとして切り出すなど、処理を簡素化することも必要です。

コメント