【条件分岐】Excel VBA の if ステートメント
条件で分ける!Excel VBA の if ステートメント
条件分岐とは?
Excelでマクロを作成し自動化させる際に非常に便利なのが条件分岐による処理です。条件分岐とは「ある条件ではこの処理を行う」「この条件に満たない場合はこの処理を行う」「条件に満たない場合は処理せずにそのままにしておく」というような、条件によって処理内容を変更することをいいます。VBAで条件分岐を行う際に使用するのが、IFステートメントです。条件分岐やIFステートメントと聞くと非常に難しいように聞こえるかもしれませんが安心してください。これから一つずつ実践していくことで使い方を覚えていきましょう。
IFステートメント
If 条件式 Then 真の処理 [Else 偽の処理]
または
If 条件式 Then 真の処理 ・・・ 条件式を満たした場合の処理 [Else 偽の処理] ・・・ 条件式を満たさない場合の処理 End If
[ ]は省略可能です。
真とは、条件式を満たした場合、
偽とは、条件式を満たさない場合
条件式に書かれている条件を判定し、条件を満たしている(合致している)場合は真の処理、それ以外(条件式を満たさない)の場合は偽の処理を実行します。
真の処理、偽の処理には、複数の処理(ステートメント等)を記述することができます。
一度ここでIFステートメントのルールについて記述しましたが、実際にVBAのプログラムを作成しながら使い方について知っていきましょう。
基本の形でコードを書いてみよう
まずは、以下の表を作ってください。A、Bさんそれぞれの国語、数学、英語のテスト結果の表となっています。
ではVBAを開いて、以下のコードを記述してください。
Sub 条件分岐1()
If Cells(2, 3).Value = 100 Then
Cells(2, 4).Value = "満点"
End If
End Sub
Cells(2,1)の値=「Aさんの国語の得点」が「100」と等しいならば、隣のセルであるCells(2,4)に「満点」と表示させる形となっています。「判定」の列に「満点」という表示が出ましたでしょうか。これは「条件が"真"ならばこの処理を行う」という条件文のみを記述しました。マクロを実行し、以下のようになれば成功です。
次は「条件に満たなかった場合」も一緒に記述しましょう。以下のコードを記述してください。
Sub 条件分岐2()
If Cells(3, 3).Value >= 60 Then
Cells(3, 4).Value = "合格"
Else
Cells(3, 4).Value = "不合格"
End If
If Cells(4, 3).Value >= 60 Then
Cells(4, 4).Value = "合格"
Else
Cells(4, 4).Value = "不合格"
End If
End Sub
このコードではAさんの数学と、英語の合否判定について記述しています。先ほどの「条件分岐1」のコードでは「=」を用いてセルの値が「100」と等しい時に「満点」を表示させました。一方「条件分岐2」のコードでは「>=」という不等号を用いて、「60」以上点数は「合格」、その条件に満たない場合の処理は「Else」の後に記述することで「不合格」の表示をするようにしています。次の画像が実行結果となります。
比較演算子と論理演算子
このように条件分岐のコードを記述する際に使用した等号「=」や不等号「>=」などを比較演算子といいます。
IFステートメントでは判定する条件に、真(True)か偽(False)を評価する数式または文字列式を指定します。
数式とは、数値と比較演算子・論理演算子の組み合わせ、
文字列式とは、文字列と比較演算子・論理演算子の組み合わせです。
比較演算子
比較演算子 | 意味 |
---|---|
= | 等しい |
<> | 等しくない |
> | より大きい |
>= | 以上 |
< | より小さい |
<= | 以下 |
論理演算子
論理演算子 | 意味 |
---|---|
And | 論理積 |
Or | 論理和 |
Xor | 排他論理和 |
Eqv | 論理等価 |
Imp | 論理包含 |
Ifステートメントのネスト(入れ子)
Ifステートメントをネスト(入れ子、Ifの中にIfを入れる)することで、より複雑な条件分岐が可能となります。コードの記述方法としてはこうなります。条件を満たすときにはさらに条件を設定して処理をする、といったことが可能になります。
If 条件式1 Then
(条件式1がTrueの時には条件式2の判定を行う)
If 条件式2 Then
(どちらの条件式もTrueの時に行う処理)
Else
(条件式1がTrue,条件式2がFalseの時に行う処理)
End If (条件式1がTrueの時のコードが終了)
Else
(条件式1がFalseの時に行う処理)
End If
少し難しいですね。では以下のコードを記述してみてください。
Sub IFネスト()
If Cells(5, 3).Value >= 60 Then
If Cells(5, 3).Value >= 90 Then
With Cells(5, 4)
.Interior.Color = vbGreen
.Value = "合格"
End With
Else
Cells(5, 4).Value = "合格"
End If
Else
Cells(5, 4).Value = "不合格"
End If
End Sub
点数が「60」点以上ならさらに「90」点以上かどうかを条件分岐によって判定するコードを作成しました。「90」点以上なら「合格」の表示と共に「セルの色を緑にする」というような処理を行います。
With Cells(5, 4)
.Interior.Color = vbGreen
.Value = "合格"
End With
「With」というコードは一つのセルに複数の処理を行うことができる構文となっています。「With」で始めたらかならず「End With」で閉じてください。また「.Interior.Color = vbGreen」はセルの色を変更するコードとなります。実行するとこのようになります。
今回指定したセルでは、値が「条件2」に満たない為セルの色は変わりません。以下のコードを追加してみましょう。コード自体は同じでセルを変更しただけのものとなっています。
If Cells(6, 3).Value >= 60 Then
If Cells(6, 3).Value >= 90 Then
With Cells(6, 4)
.Interior.Color = vbGreen
.Value = "合格"
End With
Else
Cells(6, 4).Value = "合格"
End If
Else
Cells(6, 4).Value = "不合格"
End If
実行すると以下のようになりますでしょうか。
このように条件分を組み合わせることでより複雑な条件を指定し処理をすることができます。また、IFステートメントのネストは条件が「False」の時の処理にも適応することができます。まだ一つ条件を指定していないセルがあると思うので、値を変更したり条件を変更したりといろいろと試してみてください。
まとめ
いかかでしょうか。実際に操作することでただ読んで理解しようとするより理解しやすかったのではないでしょうか。マクロVBAで自動化する場合の多くは、条件により処理を変えつつ一定回数繰り返すという事が多いです。 プログラムにおいて、最も重要なステートメントのひとつがIfステートメントです。この記事を通して少しでも里香が深まればと思います。