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
    

    マイナーかつ使いどころが難しいですが、覚えておいて損はないでしょう。

    確認テスト

    次の問いに答えなさい。

    1. セルB1の値を基準にセルC1に次の条件で入力しなさい。
      • セルB1が"山田"の時、セルC1に"合格"と入力
    2. セルB2の値を基準にセルC2に次の条件で入力しなさい。
      • セルB2が30以上の時、セルC2に"合格"と入力
      • セルB2がそれ以外の時、セルC2に"不合格"と入力
    3. セルB3の値を基準にセルC3に次の条件で入力しなさい。
      なお、セルB3は必ず0以上100以下の数値が入力されるとする。
      • セルB3が30未満の時、セルC3に"不合格"と入力
      • セルB3が100の時、セルC3に"満点合格"と入力
      • セルB3がそれ以外の時、セルC3に"合格"と入力
    4. 【高難度】セルB4の値を基準にセルC4に次の条件で評価を入力しなさい。
      • セルB4が0以上30未満の時、セルC4に"不可"と入力
      • セルB4が30以上55未満の時、セルC4に"可"と入力
      • セルB4が55以上75未満の時、セルC4に"良"と入力
      • セルB4が75以上100以下の時、セルC4に"優"と入力
      • セルB4がそれ以外の時、セルC4に"入力ミス"と入力
      • [And]を1度以上使用する
    5. セルB5の値を基準にセルC5に次の条件で入力しなさい。
      • セルB5が"田中"か"伊澤"の時、セルC5に"合格"と入力
      • セルB5がそれ以外の時、セルC5に"不合格"と入力
    解答1 解答2 解答3 解答4 解答5

    関連リンク

    次ページ:Select Case文

    前ページ:比較と真偽

    関連ページ:条件分岐とは

    ページの先頭へ