VBA Basic8
第8章 条件分岐(Ifステートメント)
条件分岐は、プログラミングで非常によく使います。ただし、変数とともにプログラミングに慣れていない人にとってはハードルが高くなっています。
条件分岐の考え方は、プログラミングの基本になっています。 ある条件の時だけ処理させたいとか、条件によって処理を変えたいなどのときに使います。コンピュータ自身では自分で判断ができないために、コンピュータに判断をさせる必要があります。
人間は日常生活で、無意識に条件分岐して行動します。例えば、 車の運転をしていて、信号を見たときに判断が入ります。この行動をコンピュータに伝えるには次のようになります。
信号が青だったら、進みなさい、
信号が青でなかったら、
信号が赤だったら、止まりなさい
信号が赤でなかったら、注意してください
赤の条件分岐の終了
青の条件分岐の終了。
この条件分岐は非常に単純で、実際には右折だったり、左折だったり、対向車・歩行者などあらゆる条件を判断をしています。 そう考えると車の自動運転にするとはものすごい判断をさせる必要があります。
話は少々外れてしまいましたが、VBAにおいても条件分岐は非常によく使います。 その中で単純な条件分岐はIfステートメントです。
If 条件式 Then
真の処理(条件を満たしたとき処理)
Else
偽の処理(条件を満たさなかったときの処理)
End If
IF関数と非常によく似ていますが、関数と違いカンマで区切るのではなく「Then」「Else」「End If」を記述します。 条件式は比較演算子を使い、左辺と右辺を比較して条件判定します。
比較演算子 | 意味 |
---|---|
= | 左辺と右辺が等しい |
<> | 左辺と右辺が等しくない |
> | 左辺が右辺より大きい |
>= | 左辺が右辺以上 |
< | 左辺が右辺より小さい |
<= | 左辺が右辺以下 |
条件式は2つの物を比較して、比較演算子の条件を満たすと「真」満たさないと「偽」と判断します。 また条件式を論理演算子で組み合わせることも可能です。
論理演算子 | 意味 |
---|---|
And | いづれの条件のすべての合致が必要 |
Or | いづれの条件の1つに合致すればよい |
シートのセルA1が、80以上ならセルB1は"A"、80未満ならセルB1は”B" にする場合は
Aパターン
If Cells(1, 1).Value >= 80 Then
Cells(1, 2).Value = "A"
Else
Cells(1, 2).Value = "B"
End If
Bパターン
If Cells(1, 1).Value < 80 Then
Cells(1, 2).Value = "B"
Else
Cells(1, 2).Value = "A"
End If
AパターンもBパターンも全く同じ結果になります。条件式の作り方で、真と偽が入れ替わります。どのように条件式の作るのかが、Ifステートメントのポイントの1つです。
Ifステートメントはよくネスト(入れ子)して使います。 条件を細かく設定して分岐することで複雑な処理ができます。 (複雑な処理は慣れてからしましょう)
セルA1が80点以上ならセルB1は"優"、70点以上なら"良"、60点以上ならは"良"、それ以外ならは"不可"、 このような場合は、Ifステートメントをネストすることで可能になります。
If Cells(1, 1).Value >= 80 Then
Cells(1, 2).Value = "優"
Else
If Cells(1, 1).Value >= 70 Then
Cells(1, 2).Value = "良"
Else
If Cells(1, 1).Value >= 60 Then
Cells(1, 2).Value = "可"
Else
Cells(1, 2).Value = "不可"
End If
End If
End If
この例は数字によって評価を判定するものですが同じセルの値をいくつも比べるので、Ifステートメントだと長くなってしまいます。 このような場合は次の章のSelect Caseステートメントを使うのが一般的です。
このような使い方ではなく、 異なる項目の条件の組み合わせでIfステートメントの中にIfネストすることは多いです。 ただし、ネストが深すぎると判りづらくなるので、3~4段階くらいにとどめます。
プログラミングに慣れないうちは、Ifステートメントの条件式に苦手意識を持つものです。 逆にIfステートメントが理解できるようになると、いろいろな処理ができるようになります。条件判定のIfステートメントはぜひ押さえていただきたいです。