【条件分岐】If文の使い方
今回の目標
- Ifを使用して、特定条件時のみの処理をする
- Ifを使用して、特定条件時外の処理をする
- Ifを使用して、特定数値の範囲のみ処理をする
説明
Excelの「If関数」を使用したことはありますか? 『もし~なら…する』の意味があり、今回のIf構文も考え方は同じです。
事前準備
書くサンプル毎に、セルA1に指示された数値を入力してください。このセルA1を用いて説明します。
特定条件時のみ実行する
基本構文です。
If 条件① Then
条件①が真(=True)の時にのみ実行する処理
End If
条件①が成立する(真)の時、処理を行います。条件①が成立しなかった(偽)の時、End Ifまで処理をスキップします。
処理は2命令以上でも問題ありません。
『条件①が真(=True)の時にのみ実行する処理』の先頭が右にずれているのは見やすくしているためです。Tabキーを押すことで右へ移動させることができます。この右へずらすことは必須ではありませんが、極力行ってください。
サンプルプログラムです。
Sub Sample_If1()
If Cells(1, 1) = 10 Then ' ・・・①
Cells(1, 2) = "セルA1は10です。" ' ・・・②
End If ' ・・・③
End Sub
A1に10を入力してから、上記「Sample_If1」を実行してください。セルB2に「セルA1は10です。」と入力されます。これはセルA1に10が格納されており、①の条件が成立しているため、②の処理が行われます。
もし、セルA1に10以外の値が格納されている場合は、③までスキップされます。
特定条件時でない場合のみ実行する
「Excelの『If関数』と同じなら偽の場合の処理もあるのでは?」と思われた方は鋭いです。条件が成り立たない場合は、Else を用いる事で条件が成り立たなかった場合にのみ実行させることもできます。
基本構文です。
If 条件① Then
条件①が真の時にのみ実行する処理
Else
条件①が偽(=False)の時にのみ行う処理
End If
Elseが追加されました。
条件①が成り立った時はElseまで実行され、End Ifまで処理がスキップされます。
条件①が成り立たない時はElseまでスキップされ、ElseからEnd Ifまで実行されます。
使用サンプルです。
Sub Sample_If2()
If Cells(1, 1) = 10 Then '・・・①
Cells(1, 2) = "セルA1は10だ。" '・・・②
Else '・・・③
Cells(1, 2) = "セルA1は10でない。" '・・・④
End If '・・・⑤
End Sub
A1に「30」と入力してから、上記「Sample_If2」を実行してください。実行すると、セルB2に「セルA1は10でない。」と入力されます。これはセルA1に30が格納されており、①の条件が成立しません。そのため、②がスキップされ、③と④の処理が行われます。
仮に、セルA1に10が格納されている場合は、③と④がスキップされます。
特定条件でない時、条件を追加する
上記で学んできたことは、特定条件時に該当する場合の処理、及び条件に該当しない場合の処理です。
条件に該当しない場合、更に別の条件に該当するか、を調べて該当していたら処理を行います。
基本構文です。
If 条件① Then
真の時に行う処理
Else If 条件② Then
条件①が偽で、条件②が真の時に行う処理
Else
条件①と条件②の条件に一致しない時に行う処理
End If
Else If 条件② Then が追加されました。
サンプルです。
Sub Sample_If3()
If Cells(1, 1) < 5 Then '5未満なら実行
Cells(1, 2) = "セルA1の値は5未満です。"
ElseIf Cells(1, 1) < 10 Then '5以上10未満なら実行
Cells(1, 2) = "セルA1の値は5以上10未満です。"
Else 'それ以外(10以上)なら実行される
Cells(1, 2) = "セルA1の値は10以上です。"
End If
End Sub
応用1:10以上かつ20以下
セルA1が10以上20以下の時のみ判定を処理を行うプログラムを作成します。これは「10以上」と「20以下」の2つの条件を成立させなければなりません。先の「Sample_If3」を参考にすると次のようになります。
Sub Sample_If4()
If Cells(1, 1) < 10 Then '10未満は処理をしない
ElseIf Cells(1, 1) <= 20 Then '20以下の場合は処理
Cells(1, 2) = "セルA1は10以上20以下です。"
End If
End Sub
「10未満は処理をしない」は「10以上の場合は処理を行う」と言い換えられます。「Sample_If4」はプログラムは使用通り処理は行いますが、1つ目のIf文後に実行処理が無く、この方法は推奨されません。
そのため、別の方法を2つ紹介します。
1つ目は「If文の中にIf文を入れる」方法です。If文の真だったときの処理に更にIf文を作ります。サンプルプログラムです。
Sub Sample_If5()
If 10 <= Cells(1, 1) Then '10以上の場合は処理
If Cells(1, 1) <= 20 Then '20以下の場合は処理
Cells(1, 2) = "セルA1は10以上20以下です。"
End If
End If
End Sub
最初のIf文で10以上の場合のみとし、次のIf文で20以下の場合のみとしています。結果2つの条件が成り立ったときにのみ、実行されます。
このような構文の中に構文とする方法は「入れ子」と呼ばれますので、覚えましょう。
2つ目の方法です。「条件A And 条件B」と書くことで、『条件Aかつ条件Bの両方が真か判定する』となります。条件A・Bのどちらかが偽か、共に偽の場合は偽となります。
使用サンプルです。
Sub Sample_If6()
If 10 <= Cells(1, 1) And Cells(1, 1) <= 20 Then
Cells(1, 2) = "セルA1の値は10以上かつ20以下です。"
End If
End Sub
応用2:10以下もしくは20以上
今度は、セルA1が10以下もしくは20以上の時のみ判定を処理を行うプログラムを作成します。これは「10以下」か「20以上」の2つの条件のどちらかを成立させなければなりません。先の「Sample_If3」を参考にすると次のようになります。
Sub Sample_If7()
If Cells(1, 1) <= 10 Then
Cells(1, 2) = "セルA1は10以下か20以上です。"
ElseIf Cells(1, 1) >= 20 Then
Cells(1, 2) = "セルA1は10以下か20以上です。"
End If
End Sub
「Sample_If7」は問題なく処理しますが、同じ処理を2回書いているため好ましくありません。ここで他の方法を2種類紹介します。
1つ目は「条件A Or 条件B」と書くことで、『条件Aもしくは条件Bが真なら処理を実行する』となります。『Sample_If8』は使用サンプルです。
Sub Sample_If8()
If Cells(1, 1) <= 10 Or Cells(1, 1) >= 20 Then
Cells(1, 2) = "セルA1の値は10以下もしくは20以上です。"
End If
End Sub
応用3:1行でIf文の命令まで書く
条件が成り立った時の処理が1命令のみかつ[ElseIf]や[Else]を使用しない場合は1行で記載することができます。(:を使用すれば2命令以上も可能だが可読性低下のため非推奨)
基本構文です。
If 条件① Then 条件①が真(=True)の時に行う処理
この場合は、End If が必要ありません。
サンプルプログラムです。
実行結果は最初のサンプル「Sample_If1」と同じです。
Sub Sample_If10()
If Cells(1, 1) = 10 Then Cells(1, 2) = "セルA1は10です。"
End Sub
マイナーかつ使いどころが難しいですが、覚えておいて損はないでしょう。
確認テスト
次の問いに答えなさい。
-
セルB1の値を基準にセルC1に次の条件で入力しなさい。
セルB1が"山田"の時、セルC1に"合格"と入力
【解答例】
Sub TestIf1() If Cells(1, 2) = "山田" Then Cells(1, 3) = "合格 " End If End Sub
【別解】
Sub TestIf1_Another() If Cells(1, 2) = "山田" Then Cells(1, 3) = "合格 " End Sub
【解説】
上記【解答例】は特定条件時のみ実行するIf文の基本形です。必ず覚えて使えるようになってください。 【別解】は使いこなせずとも、見かけたら思い出せる程度には覚えてください。
-
セルB2の値を基準にセルC2に次の条件で入力しなさい。
セルB2が30以上の時、セルC2に"合格"と入力
セルB2がそれ以外の時、セルC2に"不合格"と入力
【解答例】
Sub TestIf2() If 30 <= Cells(2, 2) Then Cells(2, 3) = "合格" Else Cells(2, 3) = "不合格" End If End Sub
【解説】
特定条件時の処理とその特定条件時以外の処理のプログラムです。 確実に使いこなせるようにしましょう。
-
セルB3の値を基準にセルC3に次の条件で入力しなさい。
なお、セルB3は必ず0以上100以下の数値が入力されるとする。セルB3が30未満の時、セルC3に"不合格"と入力
セルB3が100の時、セルC3に"満点合格"と入力
セルB3がそれ以外の時、セルC3に"合格"と入力
【解答例】
Sub TestIf3() If Cells(3, 2) < 30 Then Cells(3, 3) = "不合格" ElseIf Cells(3, 2) = 100 Then Cells(3, 3) = "満点合格" Else Cells(3, 3) = "合格" End If End Sub
【解説】
特定条件時の処理及び特定条件時に合わないかつ追加の特定条件に合う場合の処理、それら以外の特定条件時の処理のプログラムです。
プログラムを作成する時は必ずと言っても良いほど使用します。
確実に使いこなせるようにしましょう。
-
【高難度】セルB4の値を基準にセルC4に次の条件で評価を入力しなさい。
セルB4が0以上30未満の時、セルC4に"不可"と入力
セルB4が30以上55未満の時、セルC4に"可"と入力
セルB4が55以上75未満の時、セルC4に"良"と入力
セルB4が75以上100以下の時、セルC4に"優"と入力
セルB4がそれ以外の時、セルC4に"入力ミス"と入力
[And]を1度以上使用する
【解答例1】
Sub TestIf4_1() '0以下かつ30未満なら、評価は『不可』 If 0 <= Cells(4, 2) And Cells(4, 2) < 30 Then Cells(4, 3) = "不可" '30以下かつ55未満なら、評価は『可』 ElseIf 30 <= Cells(4, 2) And Cells(4, 2) < 55 Then Cells(4, 3) = "可" '55以下かつ75未満なら、評価は『良』 ElseIf 55 <= Cells(4, 2) And Cells(4, 2) < 75 Then Cells(4, 3) = "良" '75以下かつ100以下なら、評価は『優』 ElseIf 75 <= Cells(4, 2) And Cells(4, 2) <= 100 Then Cells(4, 3) = "優" 'それ以外(-1や101)なら、評価は『入力ミス』 Else Cells(4, 3) = "入力ミス" End If End Sub
【解答例2】
Sub TestIf4_2() '0~100なら各評価を入力 If 0 <= Cells(4, 2) And Cells(4, 2) <= 100 Then '0~100で、30未満なら評価は『不可』 If Cells(4, 2) < 30 Then Cells(4, 3) = "不可" '0~100で、30未満でなく、55未満なら評価は『可』 ElseIf Cells(4, 2) < 55 Then Cells(4, 3) = "可" '0~100で、55未満でなく、75未満なら評価は『良』 ElseIf Cells(4, 2) < 75 Then Cells(4, 3) = "良" 'それ以外(0~100で、75未満でない)なら評価は『優』 Else Cells(4, 3) = "優" End If '0~100でないなら『入力ミス』 Else Cells(4, 3) = "入力ミス" End If End Sub
【解説】
今回は条件が多めです。まずは、条件をまとめてみましょう。
評価(入力文) 数値 不可 0以上 ~ 30未満 可 30以上 ~ 55未満 良 55以上 ~ 75未満 優 75以上 ~ 100以下 入力ミス その他 「優」は100以下なので注意しましょう。
今回は解答例を2つ用意しました。
解答例1の解説です。
解答例1では、順当に条件毎にAndを使用して各評価を決め、どれも該当しない場合は入力ミスとしています。
解答例2の解説です。
すべての条件が0以上かつ100以下の時に不可、可、良、優のいずれかで、それ以外がエラーです。その分岐を行った後、数値により評価を分岐させています。If文+Andは非常に有用です。確実に使えるようにしましょう。
-
セルB5の値を基準にセルC5に次の条件で入力しなさい。
セルB5が"田中"か"伊澤"の時、セルC5に"合格"と入力
セルB5がそれ以外の時、セルC5に"不合格"と入力
【解答例】
Sub TestIf5() '「田中」か「伊澤」なら『合格』 If Cells(5, 2) = "田中" Or Cells(5, 2) = "伊澤" Then Cells(5, 3) = "合格" '「田中」か「伊澤」でないなら『不合格』 Else Cells(5, 3) = "不合格" End If End Sub
【解説】
If文+Orの基本です。OrはAndに比べ使用頻度は下がると思いますが、こちらも重要です。
確実に使えるようにしましょう。