IF関数を入れ子して複数条件を指定|数式の組み立て方の手順とコツ

IF関数の親子関係

使用関数:IF
IF関数で条件「論理式」を指定して3つ以上の結果を導き出したい時は、更にIF関数を入れ子して数式を組み立てます。ちょっとした手順を踏めば、親子IF関数で構成する数式のおおよそのイメージが掴めるようになります。

結果を3つ以上に分岐させるIF関数の組み立て方

IF関数を入れ子して複数条件を指定する数式を実際どう組み立てればいいのか悩んじゃう時は、とりあえず実装したい項目を文章で書き出してみましょう。

  • B2セルに入った得点を判定する
  • 70点以上はAクラスとする
  • 50点以上70点未満はBクラスとする
  • 50点未満はCクラスとする

分岐させる結果は「Aクラス・Bクラス・Cクラス」の3つです。

偽(FALSE)だけにIF関数を入れ子する例

この場合、最初に「一つ目の結果とそれ以外」を分岐させるIF文を考えましょう。この例題では「Aクラスとそれ以外」を分岐させるIF文を「もし、~が~なら、~とし、そうでなければ~とする」という構成になることを意識しながら組み立てます。
「B2セルに入った得点が70点以上なら、AクラスとしそうでなければBクラスかCクラスとする」・・・こんな感じです。
IF関数の引数「論理式」「真の場合」「偽の場合」に当てはめると、下図のようになります。「偽の場合」にBクラスとCクラスを分岐するIF関数を入れ子することが解ったと思います。
IF関数を入れ子する「偽の場合」
後は、「偽の場合」に入れ子するIF文を先ほどと同様にして「B2セルに入った得点が50点以上なら、BクラスとしそうでなければCクラスとする」のように組み立てればOK。下図は引数に当てはめたダイアログ。
入れ子するIF関数の引数
数式は「=IF(B2>=50,“Bクラス”,“Cクラス”)」。この式の「=」を抜かした残り全部をコピーして、最初のAクラスとその他を分岐するIF関数の「偽の場合」にペーストすれば完了です。
親になるIF関数のダイアログ
最終的な数式「=IF(B2>=70,“Aクラス”,IF(B2>=50,”Bクラス”,”Cクラス”))」

IF関数を入れ子して複数条件を指定する数式を組み立てる手順とコツが掴めたでしょうか? もう少し複雑な条件を加える場合も基本は同じです。

真(TRUE)・偽(FALSE)両方にIF関数を入れ子する例

ネットオークション取引の管理表を例に、「真の場合」と「偽の場合」の両方にIF関数を入れ子して更に多くの条件を分岐させた数式を構築してみることにします。

「違約状況」というフィールドのセルに、支払期限内に決済が行われた場合は「OK」と表示し、期限を過ぎて決済された場合には「警告」と表示、更に、未入金の場合、期限内なら空欄にし、期限を過ぎていたら「督促」と表示させます。
4通りの結果を分岐する例題
必要な要素を書き出してみましょう。

  • 決済日の入るI4セルは未入金なら空
  • 支払期限が過ぎて、未入金なら、違約状況に「督促」と表示
  • 支払期限内で、未入金なら、違約状況は空欄にする
  • 支払期限が過ぎて、入金があったら、違約状況に「警告」と表示
  • 支払期限内で、入金があったら、違約状況に「OK」と表示

分岐させる結果は「“督促”・空欄・”警告”・”OK”」の4通り。条件は「未入金なら・入金があったら」「支払期限が過ぎて・支払期限内で」の2バージョン。
どちらのバージョンを数式の大枠――親子関係で言うところの「親」に当たるIF関数の第1引数にすべきでしょうか?
IF関数の親子関係
こんな時は、まず、ターゲットにするセルに注目。この場合は「決済日」が入るセル。
上で書き出した項目1の記述から、このセルは「未入金なら空」で「入金があったら日付が入る」ことがわかります。ここに条件分岐の足がかりが見つかりました。項目1の「決済日の入るI4セルは未入金なら空」から「もし、決済日のセルが空なら…」という条件式を派生させ、「セルが空で、支払期限内(外)の場合」と「空じゃなくて、支払期限内(外)の場合」で「真」「偽」を振り分けることができます。
例題をIF関数の数式に当てはめた図
後はそれぞれの要素を当てはめていけば完了。
未入金なら=セルが空なら(TRUE)」という条件を含む2と3が「真の場合」に入る子IF関数を構成する要素、「入金があったら=セルが空でなければ(FALSE)」という条件を含む4と5が「偽の場合」の子IFを構成する要素となるわけです。

親IFの「真の場合」に入る子IFの組み立て
この「論理式」には現時点(今日の日付)で支払期限(H4)内かどうかを記述するわけですから、「H4>=TODAY()」=「支払期限(H4)が今日の日付以後だったら(支払期限内なら)」または、「H4<TODAY()」=「支払期限(H4)が今日の日付より前だったら(支払期限が過ぎていたら)」とします。
「真の場合」に入れ子するIFの論理式
論理式を「H4<TODAY()」とした場合、第2引数「真の場合」には「“督促”」が入ります。「期限が過ぎて決済がなければ」→「督促」という条件が成立。
「真の場合」に入れ子するIFの第2引数
第3引数「偽の場合」には「“”」が入ります。「期限内で決済がなければ」→「空欄」という条件が成立。
「真の場合」に入れ子するIFの第3引数
数式は「=IF(H14<TODAY(),“督促”,“”)」です。

親IFの「偽の場合」に入る子IFの組み立て
ここは特に解説の必要がないかもしれませんね。I4セルに日付が入っていた場合の子IF関数「論理式」に入るのは「決済日(I4)が支払期限(H4)以内であれば…」=「I4<=H4」。
違約状況を判定する論理式
「真の場合」=「期限内ならOK」=「”OK”」。「偽の場合」=「期限内でなければ警告」=「”警告”」。
違約状況のダイアログ

親IFのまとめ

IF文を組み合わせて複数条件の指定を実装する時は、「論理式」の筋道を一つの文章にして考えるのが早道です。項目を書き出さないまでも、頭の中で筋の通った文脈を思い描いてみるだけで数式のアウトラインが浮かんできます。後はたぶん、慣れの問題でしょう。

この例題なら、「もし、決済日(I4)が空欄だったら、既に期限(H4)を過ぎていれば違約状況のセルに”督促”と表示し、期限(H4)内なら空欄にしておく。決済日(I4)が空欄でなければ、日付が期限(H4)内なら”OK”と表示し、期限(H4)を過ぎていたら”警告”と表示する」みたいな感じ。
文章の区切りごとに数式を構築、「IF(I4=””)」、「IF(H14<TODAY(),”督促”,””)」、「IF(I4<=H4,”OK”,”警告”)」最終的な親IF関数の引数に当てはめれば完成です。

下図が2つの引数にIF関数を入れ子したダイアログです。
複数条件を指定するIF関数の最終的なダイアログ
最終的な数式は「=IF(I4=””,IF(H4<TODAY(),”督促”,””),IF(I4<=H4,”OK”,”警告”))」となります。

IF関数ネスト(AND関数・OR関数)で複数条件を設定してランク判定させる

タイトルとURLをコピーしました