条件分岐ifの使い方

かばくん

もしこうならあれをして、違うならこうする
みたいなことをしたいです!

へびせんせい

そのような場合分けを条件分岐といいます。
プログラミングをやっているとほぼ必ずでてくるでしょう。
条件分岐はIf構文を使ってクリアできます。

Point!
条件分岐といえば、If構文

もし・・・なら、~をする。if文の基本構文

VBAにおけるifの使い方
If 条件式 Then
  処理(True)
Else
  処理(False)
End If

Ifのあとの条件式に合致するかどうかを判断します。
条件を満たすなら処理(True)が動き、条件を満たさないなら処理(False)が動きます。
If構文の最後にはEndIfで終わりますので、忘れないようにしましょう。
また、Elseは省略可能です。条件式がFalseのときは何もしないというときは、Elseを書かなくてよいです。

次に、条件式の書き方も覚えなければなりません。

条件式の書き方

比較演算子を使った条件式

数学などでも使っていた比較演算子です。
馴染みがあるので、覚えやすいですね。

VBAでの条件式の一覧
比較演算子 説明
a < b a は b より小さい
a <= b a は b 以下
a > b a は b より大きい
a >= b a は b 以上
a = b a と b が等しい
a <> b a と b が等しくない

論理演算子を使った条件式

上記の比較演算子を2つ使いたいときに、論理演算子を使うことができます。
AndやOrと書きます。こちらも覚えやすいですね。

VBAでの条件式の一覧
論理演算子 説明
比較演算子1 And 比較演算子2 比較演算子1と2がともにTrueならば、Trueを返す
どちらかがFalseならば、Falseを返す
比較演算子1 Or 比較演算子2 比較演算子1と2のどちらかがTrueならば、Trueを返す
どちらもFalseならば、Falseを返す
Not 比較演算子 比較演算子がTrueならば、Flaseを返す
比較演算子がFalseならば、Trueを返す

ifの基本構文にさらに条件を追加する

複雑な条件を組んでいると、上記のIf文と論理演算子だけでは、条件式が足りないときがあります。
そんなとき、さらに条件を追加する方法があります。

・IfElse文を使う
・Ifの入れ子(ネスト)構造を使う

ElseIf文

VBAにおけるifelseの使い方

If文の条件式がFalseのときに、さらに「もし・・・なら、~をする」を追加するのが、IfElse文です。
最初のIf文がTrueであれば処理1が実行され、ElseIf文とElse文は実行されず、EndIfされてIf文から抜けることになります。
必要に応じて、ElseIf文は何度でも追加できます。

If 条件式 Then
  処理1
ElseIf 条件式 Then
  処理2
Else
  処理3
End If

ElseIf文のサンプルコード

変数myageには、自分の年齢を代入して、実行してください。

Sub if文()
    Dim myage As Long
    myage = 31

    If myage > 50 Then
        MsgBox ("私の年齢は50歳を超えています")
    ElseIf myage > 30 Then
        MsgBox ("私の年齢は50歳以下で、30歳を超えています")
    Else
        MsgBox ("私の年齢は30歳以下です")
    End If
End Sub

Ifの入れ子(ネスト)構造

VBAにおけるifの入れ子(ネスト)の使い方

If文の中に、さらにIf文を入れる、こういった構造を入れ子(ネスト)構造といいます。
これは、If文に限ったことではなく、プログラミングを行う上でよく出てくる構造です。
プログラムがどういう流れで実行されるのかをよく考え、しっかり理解しましょう。

If 条件式1 Then
  If 条件式2 Then
    処理(True)
  End If
End If

どう処理されるかというと、

  1. 最初のIfの条件式1が判定
  2. 条件式1がTrueであるなら、中のIf文に進む
  3. 次のIfの条件式2が判定
  4. 条件式2がTrueであるなら、処理が実行される
  5. もし、Falseなら何も実行されず、If文から抜ける

となります。
ネストはプログラミングでよく出る構造ですが、どうしても必要なケースのときのみの使用にしましょう。ネストが深くなるにつれて、プログラムの可読性が悪くなります。
ほとんどのケースでは、論理演算子とElseIf文まで使用すれば、条件制御が可能なはずです。

プログラミングで重要な条件分岐では、主にIf文を使います。
しかし、もう一つ、条件分岐を実行できるコマンドがあります。それは、Select Case文です。
Select Case文は条件式が簡単で、かつ複数あるようなときに使われることが多いですが、絶対にSelect Case文を使うべき、といったことはありません。
If文でもまったく同じことが実装できるのです。Select Case文については、また後ほど触れます。


If文についての練習問題

へびせんせい

まず、Excelシート1のA1セルに自分でなにか数値を入力しなさい。
その後、プログラムで、A1セルの値が100以上なら「入力されている値は100以上です」、
100未満なら「入力されている値は100未満です」とMsgBoxで表示しなさい。
また、何も入力されていないなら、「A1セルに数値を入力してください」とMsgBoxで表示せよ。
*条件式の「何も入力されていない」は、If Range("A1").Value = "" Then と書ける

解答はコチラ

Excelを開いて、コードを確認してください

Download