If文による条件分岐-Excel VBA Tips

Excel VBA Tips集-2

Excel VBAにおけるif文の使い方

if文は条件の真偽によって処理を枝分かれさせたいときに用いるExcel VBAの制御構文(せいぎょこうぶん)です。if文などのプログラムの流れを操作する構文を制御構文と呼びます。条件の真偽は、真(しん)の場合、True、偽(ぎ)の場合、Falseで表されます。

if文の条件式をVBAが評価して、TrueFalseを判断します。ユーザーは条件式がTrueの場合の処理と、Falseの場合の処理を予め準備しておくことができます。尚、条件式の評価結果がFalseの場合の処理は省略することもできます。

またExcel VBAにおけるif文はifステートメントと呼ばれることも多いです。

最も単純なifステートメントのサンプルコード

このサンプルコードでは、「A1セルの値が数値の10かどうか」という条件を判定し、
A1セルの値が数値の10である場合(=条件式の評価結果がTrueの場合)、
「B1セルに、”A1セルの値は10です。”という文言を入力せよ」という処理を実行します。

条件式に該当するのは「Range(“A1”).Value = 10」の部分です。この条件式の中に登場する「=」は比較演算子(ひかくえんざんし)と呼ばれるものです。その名の通り、比較演算子は、2つの値を比較し、その結果をTrueFalseのいずれか一方で返します。

Excel VBAにおける比較演算子には以下のようなものがあります。

Excel VBAにおける比較演算子一覧表

比較演算子 用例 意味
= If Range(“A1”) = 10 Then … A1セルと10が等しければTrue
> If Range(“A1”) > 10 Then … A1セルが10より大きければTrue
< If Range(“A1”) < 10 Then … A1セルが10より小さければTrue
>= If Range(“A1”) >= 10 Then … A1セルが10と等しいか、または、10より大きければTrue
<= If Range(“A1”) <= 10 Then … A1セルが10と等しいか、または、10より小さければTrue
<> If Range(“A1”) <> 10 Then … A1セルが10でなければTrue

最も単純なifステートメントの文法

If 条件式 Then
    条件式がTrueの場合の処理
Else
    条件式がFalseの場合の処理
End If

尚、「Else(えるす) 以下」の部分は省略することができます。End Ifを省略することはできません。Else文を省略した場合のif文の書式は以下のようになります。

If 条件式 Then
    条件式がTrueの場合の処理
End If

ちなみに、「Then」は「ぜん」と読みます。Thenを和訳すると「そのときには」という意味になります。

では、次にElse文を用いたifステートメントの例文を見てみましょう。

Elseを用いたifステートメントのサンプルコード

サンプルコード実行前の画面は以下の通りです。

if文のサンプル-1

このサンプルコードでは新鮮なバナナの定価によって条件分岐しています。もし新鮮なバナナの価格が100円以上ならば、割引後の販売価格は定価の2割引きになります。つまり定価の0.8倍の価格ですね。

逆に、「新鮮なバナナの定価が100円以上」という条件を満たさなければ、Else文以下が実行されます。Else文以下には、定価から10円値引きするという処理が書かれています。もし新鮮なバナナの定価が90円だったら値引き後の販売価格は80円になりますね。

しかし、このサンプルコードの場合、新鮮なバナナの価格は190円と、100円以上の値段なので、値引き後の販売価格は定価の2割引きになります。従って実行結果は以下のようになります。

if文のサンプル-2

ElseIf文

ElseIf(えるすいふ)文を利用すればさらに複雑な条件分岐が可能になります。ElseIf文はIf文の条件式が成り立たなかった場合に、第二、第三の条件式を設定するためのステートメントです。ElseIf文は1個しか使わなくても構いませんし、10個使うこともできます。

実際にサンプルコードを通して、ElseIf文の使い方を学びましょう。

構文

ElseIf 条件式 Then
    条件式がTrueの場合の処理

ElseIf文を2個用いたサンプルコード

サンプルコード実行前の画面は以下の通りです。

elseifサンプル-1

このサンプルコードの実行結果は以下のようになります。

elseifサンプル-2

それでは、サンプルコードの流れを解説します。

まず最初に、A2セル、つまり英語のテストの点数が100点満点かどうかを判定します。テストの点数は67点なのでFlaseですね。

すると次に、一個目のElseIf文に移り、今度はテストの点数が80点以上かどうかを判定します。もし、ここでテストの点数が80点以上であれば、「Range(“B2”).Value = “優”」という行が実行され、この行以降の条件式や命令文は全て無視され、End Ifに飛びます。

しかし実際は、英語のテストの点数は80点以上ではないので、
この条件式(Range(“A2”) >= 80)はFalseとなり、
二つ目のElseIf文の条件式(Range(“A2”).Value >= 50)に移ります。

この条件式は「テストの点数が50点以上かどうか」なので、結果はTrueになりますね。従って「Range(“B2”).Value = “可”」というステートメントが実行されます。

その後、Else以下は無視され、End Ifに処理が飛び、If文を終了します。

ElseIf文は何個用いても構いませんが、あるElseIf文の条件式がTrueになると、それ以降のElseIf文やElse文は全て無視される点に注意して下さいね。尚、一番最初のIf文の条件式がTrueになった場合は、それ以降のElseIf文、Else文は全部無視されます。

論理演算子を用いてより複雑な条件式を利用する方法

=」や「>」のような比較演算子とは別に、論理演算子(ろんりえんざんし)という演算子が存在します。論理演算子を用いれば、複数の条件式を組み合わせて複雑な条件分岐が可能になります

Excel VBAの論理演算子一覧表

論理演算子 用例 意味
And Range(“A1”) = 10 And Range(“B1”) = 100 A1セルの値が10でかつ、B1セルの値が100
Or Range(“A1”) = 10 And Range(“B1”) = 10 A1セルの値が10か、もしくは、B1セルの値が10
Not Not (Range(“A1”) = 10) A1セルの値が10ではない

And演算子を用いたIf文のサンプルコード

Or演算子を用いたサンプルコード

Not演算子を用いたサンプルコード

Not演算子を用いる際は「Not (条件式)」のように、条件式を括弧でくくった方が無難です。

例えば

という条件式と、

という条件式は違う意味になります。

①式では「Range(“A1”) = 100 And Range(“B1”) = 100」という式がNot演算子で否定されています。どういう意味かというと「A1セル、B1セルともに100ではない場合」という意味です。

②式で否定されているのは「Range(“A1”) = 100」という部分だけです。従って条件式全体の意味は、「A1セルが100ではなく、B1セルは100の場合」という意味になります。

このように括弧の範囲によってNot演算子に否定される部分が変化する点に注意しましょう。

 

以上でExcel VBAにおけるIf文(またはIfステートメント)の解説を終わりにしたいと思います。

 

関連項目

 

使える!Excel VBA Tips集TOPに戻る

 

[AD]自分のペースでゆったり学ぶ Excel VBA

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA