【ゼロからわかるVBA入門】If ステートメント

打合せ
この記事は約6分で読めます。

プログラミング初心者向けのVBA入門講座第10回です。

→過去の入門講座目次はこちら

第6回の講座でVBA構文には

  • オブジェクト式
  • ステートメント
  • 関数

の3つがあることを紹介しました。

今回からはいくつかのステートメントについて説明していきます。

ステートメント

ステートメントはオブジェクトに対する操作ではなく、条件によって処理を変えたり、繰り返し処理をしたりとマクロの動きを制御するためのものです。

プロシージャの記述を宣言する「Sub」や変数を宣言する「Dim」もそれぞれ Subステートメント、Dimステートメントです。

If ステートメント

If ステートメントは「もし〇〇ならば ~ する」といった条件によって処理を変えるためのステートメントです。

1行で記述するときは

If 条件式 Then 処理1

これは条件式が成立(True)したときに処理1を実行します。

不成立(False)のときには処理1は実行されません。

処理1の記述が長くなるときや実行したい命令文が複数行あるときには Then の後で改行して行をわけて記述することもできます。

その場合にはどこまでが条件成立時に実行する処理かを明示するために End If を記述してIf ステートメントをクローズさせます。

If 条件式 Then
 処理1
End If

次のプロシージャはセルA1の値が「100」だった場合にセルB1に「OK」と入力します。

Sub test1()
    If Range("A1").Value = 100 Then   '…(1)
        Range("B1").Value = "OK"      '…(2)
    End If
End Sub

ここで(1)と(2)の2箇所で「=」を用いていますが、それぞれ意味が異なるので注意が必要です。

(1)では条件式のなかで用いられています。条件式のなかでは比較演算子が用いられるためこのときの「」は「右辺と左辺が等しい(イコール)」という意味になります。

比較演算子には次のようなものがあります。

=左辺と右辺が等しい
<>左辺と右辺が等しくない
>左辺が右辺より大きい
>=左辺が右辺以上
<左辺が右辺より小さい
<=左辺が右辺以下

一方(2)では処理としてValueプロパティの値を設定する命令文になっています。このときの「=」は代入演算子で「右辺を左辺に代入する」という意味になります。

この事例では条件式が不成立だった場合は処理は実行されませんが、不成立だった場合の処理を指示することもできます。

次のように Else の後に不成立だった場合に実行する処理を記述します。

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

この場合条件式が成立(True)すると処理1を、不成立(False)だと処理2を実行します。

次のプロシージャはセルA1の値が80以上だった場合、セルB1に「合格」と入力し、それ以外のときはセルB1に「不合格」と入力します。

Sub test2()
    If Range("A1").Value >= 80 Then
        Range("B1").Value = "合格"
    Else
        Range("B1").Value = "不合格"
    End If
End Sub

応用編

Else If で複数条件で分岐させる

次のように記述すると、条件式1True なら処理1を実行、False なら条件式2を判定し、条件式2True のときは処理2を実行、条件式1条件式2False のときは処理3を実行します。

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

このような複数条件で分岐させる方法としてはその他にSelect Case ステートメントを用いる方法もあります。Select Case ステートメントを用いたほうが可読性は高くなるため、Select Case ステートメントで記述できる場合はそちらを用いるほうがおすすめです。

Select Case ステートメントについては後日紹介します。

論理演算子を用いる

条件式に And 演算子や Or 演算子といった論理演算子を用いることもできます。

式1 And 式2

この場合、「式1式2が両方とも True の場合に True が返されます(式1 True 且つ 式2True)」

式1 Or 式2

この場合、「式1式2のどちらか一方でも True だった場合に True が返されます(式1True または 式2 True)」

次のプロシージャはセルA1が空欄ではなく、且つ、セルB1が10より大きいとき、セルC1に「OK」と入力します。

Sub test3()
    If Range("A1").Value <> "" And Range("B1").Value > 10 Then
        Range("C1").Value = "OK"
    End If
End Sub

ネスト(入れ子)構造にする

先ほどの test3 プロシージャは次のように記述しても同じ動きをします。

Sub test4()
    If Range("A1").Value <> "" Then
        If Range("B1").Value > 10 Then
            Range("C1").Value = "OK"
        End If
    End If
End Sub

これは If 文のなかに If 文を入れ込んだ記述で、このような構造を「ネスト(入れ子)構造」と言います。このケースでは

If 条件式1 Then
 If 条件式2 Then
  処理1
 End If
End If

という構造で、条件式1条件式2の両方が True だった場合のみ処理1が実行されます。

この事例のように And 演算子と同じ動きをする場合にはわざわざネストにする必要もないのですが、ネストを使うことでいろいろな条件に対して処理を分岐することが可能になります。

セルA1の値をいろいろ変えながら次のプロシージャを実行してみてください。

Sub test5()
    If Range("A1").Value >= 50 Then
        Range("B1").Value = "合格"
        If Range("A1").Value >= 80 Then
            Range("C1").Value = "優良"
        Else
            Range("C1").Value = "良"
        End If
    Else
        Range("B1").Value = "不合格"
        If Range("A1").Value < 25 Then
            Range("C1").Value = "補修 および 再試験"
        Else
            Range("C1").Value = "再試験"
        End If
    End If
End Sub

まとめ

いかがでしたか。

条件分岐の処理はVBAに限らずどのプログラム言語でも重要な基礎となるものですので、この考え方を理解することはプログラミングをするうえでとても大事なことです。

プログラムを習得するにはとにかくいろいろと書いて実行してみることが一番です。

今回のサンプルコードを参考に自分でもいろいろなコードを書いて実行してみてください。

コメント

タイトルとURLをコピーしました