プログラミングを始めたばかりだと「プログラムができれば、何でも自動でパソコンがしてくれる」と思う人もいます。
たしかにプログラムを組めば自動でパソコンに処理をさせることはできますが、判断する時の条件は人間が教えてあげないといけません。つまり「○○○の時は、□□□を実行しろ」と、「条件」と「実行する内容」は人間が明確にして、プログラムを作ります。
この条件を指定する時に使うのが、今回説明するIf文です。If文は日本語で言うと「もし○○時は・・・」という意味になります。
エクセルのシートに次のようなデータがある前提で、If文の基本的な書き方・使い方を説明していきます。
条件の数によってIf文の書き方は少し違い、主に3つのパターンがあるので、それぞれ説明していきます。
条件が1つだけの時
If 条件1
(処理1)
End If
処理1は、条件1となった時だけ実行される処理です。
文法を見てもピンとこないと思うので、実際に「5問全問正解の時、メッセージを表示する」プログラムを組んでみます。
1 2 3 4 5 6 7 8 9 10 11 12 |
Sub RensyuIf1() If Range("B2").Value = 5 Then 'セルB5の値が5の時、この中にある処理が実行されます MsgBox "おめでとう!5問全問正解です。" End If End Sub |
※先頭に’が付いている行(‘セルB5の値が5の時、この中にある処理が実行されます)は、コメントという人間用のメモです。なので、このコメント部分はあってもなくても、プログラムの実行結果に影響はありません。
実際にこのプログラムを実行すると、次のようにメッセージが表示されます。
初めてのIf文なので、ちょっと細かく説明していきます。If文では条件を満たす時に、If文の中(If ~ End Ifの中)のプログラムが実行されます。
今回の例では、If文の条件は、
1 2 3 |
If Range("B2").Value = 5 Then |
です。
ここで使われている「Range(“B2”).Value」は「セルB2の値」、その後の「 = 5」は「左辺の値が5と等しい」という意味になります。つまり日本語で言うと「セルB2の値が5の時」が条件になります。
条件が満たされた時に実行されるプログラムが、
1 2 3 |
MsgBox "おめでとう!5問全問正解です。" |
です。
このMsgBoxは、直後で指定した内容(引数)を、メッセージボックスで表示してくれる便利な命令です。ここでは「おめでとう!5問全問正解です。」というメッセージを表示してくれます。
メッセージ内容を、”(ダブルクォーテーション)で囲んでいるのも大事なポイントです。このような文字を扱う時は、”で囲むと覚えてください。
If文の中の処理は、字下げをしてIf文の処理範囲がわかりやすいようにしましょう。
対象のプログラムを選択状態にして、Tabキーを押すと、複数行でもまとめて簡単に字下げができます。
If文の1番基本的な書き方を説明しましたが、実際に自分で同じようにプログラムを打ち込んで試してください。
説明を聞いた直後は「こんなの簡単。わかった」と思ってしまいますが、実際に自分でプログラムをすると、意外とつまづくことがあります。でも、その失敗や苦労が、VBAをマスターする1番の近道です。
プログラムを書く場所や動かし方がわからない場合は、「エクセルVBAを書く場所と動かす方法」で確認してください。
If文の条件で使う=について
プログラムの命令文で、Range(“B2”).Value = 5とあった場合、セルB2に5がセットされます。
でも、If文の条件Range(“B2”).Value = 5は、セルB2が5と等しいか判断するだけで、セルB2の値は変化しないので勘違いしないようにしてください。
メッセージが表示されない場合
メッセージが表示されない場合は、違うエクセルのシートがアクティブ(画面で1番上)になっている可能性が高いです。今回のクイズ結果のシートを一度表示してから、再度プログラムを実行してみてください。
どのファイル、どのシートという指定もできますが、今は欲張らずに対象シートをアクティブにするとおぼえてください。
条件がYesかNoのように2つしかない時
If 条件1
(処理1)
Else
(処理2)
End If
条件1の時は処理1、条件1以外の時は処理2が実行されます。
さっきの例だと、「5問全問正解の時」しかメッセージが表示されませんでした。「5問全問正解以外の時」もメッセージを表示したい場合は、次のような書き方になります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
Sub RensyuIf2() If Range("B2").Value = 5 Then 'セルB5の値が5の時、この中にある処理が実行されます MsgBox "おめでとう!5問全問正解です。" Else 'セルB5の値が5以外の時、この中にある処理が実行されます MsgBox "残念・・・間違いがあります。" End If End Sub |
今回のように「5問正解」と「5問正解以外」の2つの状態(YesかNo)で処理をわけたい時は、Elseを使います。
If文の条件と一致しなかったときは、どんな値(今回の例だと5以外の全ての数)でも、Elseに書かれているプログラムが実行されます。
このブログラムを実行すると、エクセルシートの正解数(セルB2)の値によって、次のような結果になります。
・正解数が5の時は、次のメッセージが表示されます。
・正解数が5以外の時は、次のメッセージが表示されます。
条件が複数ある時
「5問正解」と「それ以外」ではなく、もっと条件を増やしたい場合は、次のようにElseIfで条件を追加できます。
If 条件1
(処理1)
ElseIf 条件2
(処理2)
Else
(処理3)
End If
たとえば、「5問正解の時」「4問正解の時」「それ以外の時」で処理をわける場合は次のようなプログラムになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
Sub RensyuIf3() If Range("B2").Value = 5 Then 'セルB5の値が5の時、この中にある処理が実行されます MsgBox "おめでとう!5問全問正解です。" ElseIf Range("B2").Value = 4 Then 'セルB5の値が4の時、この中にある処理が実行されます MsgBox "おしい!4問正解です。" Else 'セルB5の値が5と4以外の時、この中にある処理が実行されます MsgBox "残念・・・間違いがあります。" End If End Sub |
このブログラムを実行すると、エクセルシートの正解数(セルB2)の値によって、次のような結果になります。
・正解数が5の時は、次のメッセージが表示されます。
・正解数が4の時は、次のメッセージが表示されます。
・正解数が5と4以外の時は、次のメッセージが表示されます。
「3問正解した時」など、もっと条件を追加したい場合は、次のようにElseIfを増やしてプログラムを書くことができます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
Sub RensyuIf4() If Range("B2").Value = 5 Then 'セルB5の値が5の時、この中にある処理が実行されます MsgBox "おめでとう!5問全問正解です。" ElseIf Range("B2").Value = 4 Then 'セルB5の値が4の時、この中にある処理が実行されます MsgBox "おしい!4問正解です。" ElseIf Range("B2").Value = 3 Then 'セルB5の値が3の時、この中にある処理が実行されます MsgBox "3問正解・・・" Else 'セルB5の値が5、4、3以外の時、この中にある処理が実行されます MsgBox "残念・・・間違いがあります。" End If End Sub |
まとめ
今回はIf文の基本的な説明をしましたが、とても大事な文法です。複雑な処理も、このIf文をいくつも組み合わせることで実現しています。
そのため、読むだけでなく1度は自分でプログラムを入力して実行してみてください。