VBAのIf文を使いこなそう! 条件分岐の基本をスッキリ解説

VBAのIf文について知りたい
条件が複数の場合の記述方法が知りたい
論理演算子(Or・And・Not)の使い方が知りたい

条件によって処理を変えなければならない場合ってよくありますよね。そんなときVBAではIf文を使用します。

しかし、場合によっては複雑な条件を記述する必要がありますので、どのように書けばよいか悩んでしまうこともあるのではないでしょうか?

そこで、この記事ではVBAでのIf文の基本から複数条件の指定方法や論理演算子、比較演算子(等号・不等号)の使い方など、応用的な方法についても解説していきます。

この記事はこんな人のために書きました!

  • VBAでのIf文の書き方・使い方を理解したい
  • 条件が複数の場合の記述方法を理解したい
  • 論理演算子(Or・And・Not)の使い方を理解したい
  • 比較演算子(等号・不等号)の使い方を理解したい
  • もっと応用的な方法についても知っておきたい

If文をマスターすれば、さまざまな条件で処理を分岐することができるので非常に便利です。今回はそんなIf文について、使い方をわかりやすく解説していますので、ぜひご覧になってください。

VBAのIf文とは

If文は、2つの値の大小関係や、等しい・等しくないなどの条件により処理を変える場合によく使われます。

If文は以下のように記述します。

大小関係や、等しい・等しくないなどの条件式がTrueの場合にThen以降に記述する処理を行います。Falseの場合にはElse以降に記述する処理を行うか、もしくは記述する処理がない場合はIf文のブロック外に出ます。

それではIf文の使い方について、サンプルコードをみながら詳しく解説していきます。

条件が複数の場合(ElseIf)

ElseIf文で複数の条件で処理を分ける場合についてみていきます。記述した条件式に一致しない場合の記述するときは、ElseステートメントもしくはElseIfステートメントを使用します。

ElseIf文の使い方

ElseIf文は以下のように記述します。

それではサンプルコードで使い方を確認しましょう。このサンプルコードでは、4年に一度の「うるう年」かどうかの判定をしています。

実行結果:
if_elseif

このサンプルコードでは、西暦年数が4で割り切れる場合は「うるう年です」と、それ以外の場合は「うるう年ではありません」と表示します。なお、ElseIfステートメントとElseステートメントを記述したあとで「何もしない」とコメントアウトだけ記述し、処理を記述していない部分があります。

これでも問題になることはありません。

処理が1行の場合の記述の省略

If文の処理が1行の場合、If文と処理を1行にまとめて記述することができます。ただし、1行にまとめられるのはElseIf-Thenステートメントのあとの処理部分だけです。

次のようにしてIf文と処理を1行にまとめます。

If文の最初の条件と処理を1行にまとめるとエラーになり、またElseステートメントのあとの処理もエラーとなります。

Elseステートメントの後の処理はElseステートメントの後に「:」(コロン)で、複数行を1行にまとめることができます。

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

実行結果:
if_elseif

このサンプルコードではまず「:」(コロン)を使ってElseステートのあとの処理を1行にまとめています。

次にうるう年でない場合では、If文の最初の条件を1行にまとめるために、わざと最初の条件をFalseにして1行にまとめて、ElseIfステートメントで条件を入力しています。

If文の入れ子(ネスト)の使い方

If文の条件の中で、さらに条件を追加したい場合ってありますよね。これをif文の入れ子(ネスト)と言います。

先ほどの例を変更します。「うるう年」といえば夏季オリンピックの開催年ですよね。そしてオリンピックは冬季も開催されます。以下のサンプルコードでは、西暦年数でオリンピックの開催年かどうかの判断を追加しています。

実行結果:
if_elseifネスト

このサンプルコードでは、ElseステートメントのあとにIf-Elseステートメントを記述し、入れ子になっています。

論理演算子(Or・And・Not)

If文の条件式が2つ以上ある場合について、みていきましょう。

条件式が2つ以上ある場合は、「Or」や「And」といった論理演算子を使います。論理演算子には、次のようなモノがあります。

論理演算子書き方例説明
OrA Or BAもしくはBのどちらか一方がTrueであれば、Trueの値を返す。
A、BどちらともFalseの場合のみ、Falseの値を返す。
AndA And BA、BどちらともTrueの場合のみ、Trueの値を返す。
AもしくはBのどちらか一方がFalseであれば、Falseの値を返す。
NotNot AAがTrueの場合Falseの値を返す。
Falseの場合Trueの値を返す。

それでは、実際の使い方をサンプルコードでみていきましょう。

実行結果:
if_elseif_andor

このサンプルコードでは、まず西暦年数が4で割り切れるか、もしくは余りが2の場合にオリンピック開催年かどうか判断しています。Or演算子を使って2つの条件のどちらか一方を満たすか「OR」の判定を行っています。

次にオリンピック開催年でない場合の判断をするために、Not演算子を使って西暦年数が4で割り切れない、余りが2でないという「NOT」の判定を行っています。

さらにAnd演算子を使って2つの条件を共に満たすか「AND」の判定を行っています。

比較演算子(等号・不等号)

比較演算子は2つの値を比較します。比較とは、どちらの値が大きいか小さいか、等しいか等しくないか、など二者を比べることです。

比較演算子の例をまとめました。

 書き方例説明
不等号val1 < val2va1はval2より小さい
val1 <= val2val1はval2以下
val1 > val2val1はval2より大きい
val1 >= val2val1はval2以上
等号val1 = val2val1はval2と等しい
val1 <> val2val1はval2と等しくない

比較が正しければTrueを返し、間違っていればFalseを返します。

数値を比較する場合

等号・不等号について、サンプルコードをみていきましょう。

オリンピックではスケートやサッカーのように競技連盟のルールにより、出場に年齢制限があります。それを例として、みていきます。なお、等号のサンプルについては、前述のオリンピック開催年かどうかの判定を参考にしてくださいね。

実行結果:
if_elseif_出場

文字列を比較する場合

文字列も等号を使って比較することができます。文字列の値が同じかどうか比較するには「=」記号を使い、違うかどうか比較するには「」記号を使います。

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

実行結果:
if_elseif_文字列

このサンプルコードではString型の変数strAとstrBを「=」記号で比較しています。大文字と小文字を区別し、同じでないためFalseを返していることがわかります。

GoToでIf文の処理を別で記述する

If文はGoToステートメントと合わせて使われることも多いです。

以下のように記述します。

条件式を満足する場合にラベル名で記述された処理までジャンプします。その場合、End Ifステートメント以降からジャンプ先のラベル名との間に記述された処理は実行されませんので注意しましょう。

GoToステートメントの使い方については、こちらで詳しく解説していますので、ぜひ参考にしてください。

【VBA入門】GoToでスキップ(ラベル、ループ制御、エラー処理)
更新日 : 2019年4月19日

If Likeで文字列パターンの条件分岐

If文はLike演算子と一緒に使われる場合もあります。Like演算子は2つの文字列を比較するために使用します。

以下のように記述します。

引数stringがpatternに一致する場合に処理が実行されます。patternにはパターンマッチング規則に準拠する文字列を指定することができます。

ワイルドカード文字や文字のリスト、文字の範囲を組み合わせて正規表現に近いパターンマッチングを行うことができます。

If Likeステートメントの使い方については、こちらで詳しく解説していますので、ぜひ参考にしてください。

【VBA入門】Like演算子(ワイルドカード、エスケープ、否定)
更新日 : 2019年4月19日

まとめ

ここでは、If文・If-Then-Else文の使い方、論理演算子の使い方、比較演算子の使い方などについて説明しました。条件分けが必要な複雑な処理をするためには、If文を頻繁に使うことになるでしょう。

そんなときに条件や判定が複雑になりどのように記述してよいか、わからなくなる場合もあるかもしれません。そんな場合はこの記事を何度も参考にして下さいね!

LINEで送る
Pocket

最短でエンジニアを目指すなら侍エンジニア塾

cta_under_bnr

侍エンジニア塾は業界で初めてマンツーマンレッスンを始めたプログラミングスクールです。これまでの指導実績は16,000名を超え、未経験から数多くのエンジニアを輩出しています。

あなたの目的に合わせてカリキュラムを作成し、現役エンジニア講師が専属であなたの学習をサポートするため効率よく学習を進めることができますよ。

無理な勧誘などは一切ありません。まずは無料体験レッスンを受講ください。

無料体験レッスンの詳細はこちら

書いた人

長野 透

長野 透

熊本在住のフリープログラマ兼ライターです。C/C++/C#、Java、Python、HTML/CSS、PHPを使ってプログラミングをしています。専門は画像処理で最近は機械学習、ディープラーニングにはまっています。幅広くやってきた経験を活かしてポイントをわかりやすくお伝えしようと思います。
お問合せはこちらでも受け付けています。
[email protected]

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説