【ExcelVBA】Ifステートメント
Ifステートメント
条件分岐にはIfステートメントを使います。Ifステートメントにはいくつかの書式があります。順に紹介していきましょう。
1.Ifステートメント(EndIf省略)
最もシンプルな書式です。
If [条件] Then [処理]
使用例は次のようになります。
Sub VBA基礎第6回_1() If Range("A2").Value = "VBA基礎" Then MsgBox "入力済みです" End Sub
「Range(“A2”).Value = “VBA基礎”」が条件、Thenの後ろの「MsgBox “入力済みです”」が処理になります。
条件式の「=」は第5回セルの操作で紹介した代入式ではなく、等価式となります。右辺と左辺が等しければ条件を満たす(=True)、等しくなければ条件を満たさない(=False)となります。この場合は、セルA2の値が「VBA基礎」であれば処理が実行されますが、1文字でも異なっていれば処理は実行されません。
MsgBoxは小さなメッセージウィンドウを表示する関数です。次のようなウィンドウが表示されます。
このプログラムはA2セルが「VBA基礎」かそれ以外かで実行結果が変るプログラムです。このような処理を作る構文を条件分岐といい、VBAではIfステートメントを使用します。次の2パターンでプログラムを実行しそれぞれ想定通りの動作になるか確認してみてください。
・セルA2が「VBA基礎」のときにプログラムを実行しMsgBoxが表示されること
・セルA2が「VBA基礎」以外(例えば空白など)のときにプログラムを実行し何もメッセージが表示されないこと
2.Ifステートメント
処理の流れはパターン1と同じですが、書式が異なります。
If [条件] Then [処理1] End If
使用例は次のようになります。
Sub VBA基礎第6回_2() If Range("A2").Value = "VBA基礎" Then MsgBox "入力済みです" End If End Sub
Thenの後ろに改行を入れて、MsgBoxの前にはインデント(Tab)を1つ多く入力します。次の行に「End If」を入力します。「If」と「End If」は2つでワンセットです。基本的にはIfステートメントを使うときには「End If」で終わらせると思っておきましょう。
このインデントはMsgBoxがIfの条件を満たすときに実行すること(Ifステートメントの中にあること)を分かりやすくするために設定しています。インデントを正しく設定しなくてもプログラムは正しく動作しますが、後からプログラム読み返すときや他の人にプログラムを見てもらうときに分かりやすくするために必要となるテクニックです。
数行のプログラムであればあまりメリットを感じませんが、何百行にもなるプログラムをつくるときや入れ子(=ネスト)が深くなるプログラムをつくるときには非常に重要になります。是非普段からインデントを正しくつける癖をつけてください。
処理の流れに関してはパターン1と同様ですので割愛します。
3.If-Elseステートメント
条件を満たすときと満たさない時で実行する処理を変えたいときに使用する書式になります。
If [条件] Then [処理1] Else [処理2] End If
使用例は次のようになります。
Sub VBA基礎第6回_3() If Range("A2").Value = "VBA基礎" Then MsgBox "入力済みです" Else MsgBox "入力されていません" End If End Sub
パターン2の「If」と「End If」の間に「Else」が追加されています。処理1である「MsgBox “入力済みです”」は条件がTrueのときに、処理2である「MsgBox “入力されていません”」は条件がFalseのときに実行されます。
このサンプルプログラムでは、セルA2の値によって2パターンに処理が分岐します。次の2パターンの動作確認をしておきましょう。
・セルA2が「VBA基礎」のときにプログラムを実行し「入力済みです」が表示されること
・セルA2が「VBA基礎」以外(例えば空白など)のときにプログラムを実行し「入力されていません」が表示されること
4.If-ElseIf-Elseステートメント
条件を2つ以上設定したいときに使用する書式になります。
If [条件1] Then [処理1] ElseIf [条件2] Then [処理2] Else [処理3] End If
使用例は次のようになります。
Sub VBA基礎第6回_4() If Range("A2").Value = "VBA基礎" Then MsgBox "入力済みです" ElseIf Range("A2").Value = "" Then MsgBox "入力されていません" Else MsgBox "何かが入力されています" End If End Sub
パターン3の「If」と「Else」の間に「ElseIf」が追加されています。「Else」は省略することが可能です。
処理の流れはやや複雑になるため以下の図を使いながら紹介していきます。
「If」の条件1がTrueの場合は、処理1を実行します。これは今までと同じです。
条件1がFalseの場合は、次に「ElseIf」の条件2をチェックします。条件式2がTrueの場合は、処理2を実行します。
条件2がFalseの場合は、処理3を実行します。
このようにプログラムの上から順番に条件をチェックし、最初にTrueとなったその中の処理を実行します。処理を実行したら他の処理はスキップして終了します。
全ての条件(このケースでは「If」と「ElseIf」の2つだけですが、「ElseIf」は2つ以上作ることも可能です。)がFalseとなった場合は、最後の「Else」の中の処理を実行します。もし「Else」がなければ何も処理をしないまま終了します。
宿題
1.セルA2に何か入力されていればその値をMsgBoxで表示し、何も入力されていなければMsgBoxで「何も入力されていません」と表示してください。
2.セルA3に入力されている数値によって、セルA4にそれぞれ次の文言を表示するようにしてください。
100の場合→満点
60点以上(99点以下)→合格
30点以上(59点以下)→ぎりぎり合格
上記以外→不合格
※ヒント
数値で範囲の条件を作る場合には不等号記号「<」「>」を使用します。
以上、以下の条件を作りたい場合には、イコールを組み合わせて「>=」「<=」を使用します。