数式・関数

【Excel】IF関数を入れ子にして複数条件で処理分岐を行う

スポンサーリンク
この記事は約7分で読めます。

先日アップした【Excel】「もし〇〇だったらどうする?」IF関数を使ってみようの続編になります。

今回のお題は、IF関数を入れ子にして複数の条件に沿った処理分岐を行う方法です。

最近では単一条件~複数条件までカバーするIFの上位版である「IFS(イフエス)関数」というものもありますが、IFSはExcel2016(Office365版)以降のバージョンでないと使用できないため、まだ「入れ子方式」は充分活躍の場があると思います。ぜひチャレンジしてみてください。

※解説画像はMicrosoft365を使用しています

スポンサーリンク

IF関数に複数の条件を設定する時はどうする?

IF関数は、論理式で指定した1つの条件に対し「値が真の場合(条件を満たしている)」「値が偽の場合(条件を満たしていない)」で実行する処理を変えるというものです。

IFの式構成

この「値が偽の場合」の位置にIF関数を入れて2つめの条件を設定すると、そこでまた「値が真の場合」と「値が偽の場合」に振り分けられます。更に「値が偽の場合」に対しIF関数で3つめの条件を設定する・・・という手順でどんどん入れ子にしてゆく事で、複雑な条件に沿った処理が可能になります。

IFの入れ子のイメージ
はにわ先生
はにわ先生

このように関数の中に関数を組み込む事を「関数をネストする」と言います。

入れ子はExcel2003までは最大7つまでしか設定できませんでしたが、それ以降のバージョンであれば最大64個までは組み込む事ができるようになっています。

しかし、あまり多くのIF関数を入れ子にしまうと、数式がとんでもなく長く複雑なものになってしまい実用的ではありません。多くても4つ前後に留めておいた方が管理がしやすいと思います。それよりも増えてしまいそうな時は、IF以外の関数を組み合わせて式をシンプルにできないか検討してみる事をおすすめします。

では、実際にどのように組むか例題を見ていきましょう。

IF関数の入れ子を作る

例題①

こちらはB列に「点数」が入力されている表です。表外に「Aが80以上、Bが60以上79以下、Cが59以下」という条件が書いてありますが、この条件に沿ってC列「判定」にA~Cのアルファベットを表示してみます。

点数表サンプル

数式は1つ作って残りはコピーすれば良いので、まずC3にカーソルを合わせ、[数式]タブ⇒論理⇒「IF」を順番にクリックします。

数式バーからIFを入力するところ

さて、このような場合は最初にどの条件から設定すべきか?と迷うところですが、IFを入れ子にした場合は最初の条件から順を追って検証していきますので、数値が大きい条件から設定しましょう。

では最初の論理式、「80以上ならA」から入れていきます。

論理式に「B3>=80」、Tabキーでカーソルを移動し「値が真の場合」に「”A”」と入力します。更にTabキーを押して「値が偽の場合」のボックスにカーソルを移動します。

判定Aの条件を入力し値が偽の場合にカーソルを移動したところ

ここにもうひとつIF関数を入れて条件を追加しますので、名前ボックスの右にある下向き三角をクリックします。

名前ボックスの位置

関数のリストからIFを選択します。もし一覧にIFがない場合は、「その他の関数」をクリックすると「関数の挿入」ダイアログボックスが開きますので、そこからIFを選択しましょう。

どぐうさん
どぐうさん

「関数の挿入」ダイアログボックスの使い方がよくわからない・・・という方はこちらの回を参考にしてくださいね。
【Excel】「関数の挿入」「関数の引数」ダイアログボックスの使い方

最初のIF関数の「値が偽の場合」の位置にもうひとつIFが入り、関数の引数ダイアログボックスも新しいものに切り替わります。

入れ子にしたIF用の引数ダイアログボックスに変化したところ

では2つめの条件である「B:60以上79以下」を設定しましょう。
論理式に「B3>=60」、値が真の場合に「”B”」、値が偽の場合に「”C”」を入力します。

2つ目のIFの引数を入力したところ
Point
  • 2つめのIFの条件は「60以上79以下」だよね。論理式では「B3が60以上」としか入れていないけど大丈夫?

普通に「60以上」と考えると80でも90でも含まれてしまいますが、ここは1つめのIFの「80以上はA」という条件に合致しない=すなわち79以下の値に対しての条件になります。そのため「60以上」という条件だけ入れてやればおのずと検証する範囲は「60~79」になります。

  • Cの条件は何も入れなくてもいいの?

1つめの条件「値が80以上」と2つ目の条件「値が60以上79以下」のどちらにも合致しないという事は、59以下の値すべて、という解釈になりますので必要ありません。

引数を入れ終わりましたら[OK]をクリックするかEnterを押して数式を確定しましょう。

出来上がった数式はこのようになります。

=IF(B3>=80,”A”,IF(B3>=60,”B”,”C”))

日本語に均すと、1つめの条件は「B3の値が80以上であればAと表示する」、2つめの条件(青字部分)は「残る79以下の値のうち60以上のものはBと表示し、それ以外はCと表示する」となります。

先ほど「数値の大きいものから・・・」と申しましたが、もし順序を間違えて「B3>=60,”B”」を先の条件に持ってきてしまうと60以上の値にすべて「B」が表示されてしまうので、後から「B3>=80,”A”」という条件を追加しても条件を満たす値は「なし」になり、正しい結果が求められなくなります。

という事で「入れ子は順番が大事」と心に留めておきましょう。

それでは、C3のフィルハンドルをC7までドラッグして数式をコピーしましょう。

数式が完成したところ

条件通りのアルファベットを表示することができました。

例題②

表自体は例題①とほぼ変わりませんが、点数に何も入力されていない場合は判定に「未実施」という文字列を表示するという条件が1つ追加されています。

条件に空白の場合は「未実施」と表示を追加したところ

「B列が空白だったら」という条件は「B3=””」と入力すれば良いとして、数式のどこに置くのが妥当か?という点は悩みますよね。

とりあえず例題①で作った数式に空白の場合の条件を追加してみましょう。

まずは「80以上ならA」、値が偽の場合に「60以上ならB」と入れるまでは同じ。

=IF(B3>=80,“A”,IF(B3>=60,“B”,

次にCの条件を入れなきゃいけないので、もひとつIFを入れて「60未満ならC」の条件を追加すればいいよね・・・

=IF(B3>=80,”A”,IF(B3>=60,”B”,IF(B3<60,“C”,

で、もうひとつIFを追加して「空白なら未実施」・・・

=IF(B3>=80,“A”,IF(B3>=60,“B”,IF(B3<60,“C”,IF(B3=””,”未実施”,  あれ?

最後に入れたIFの「値が偽の場合」が余ってしまいました・・・

それなら、3つめのIFの引数を「B3<60,”C”,”未実施”」にすればいいかな?とも思えますが、これはこれで問題があります。3つめの条件の「B3<60,”C”」の部分、これだと空白のセルにも「C」と表示されてしまいます。

ちょっと仕切り直して考えてみましょう。

まず80以上をA、79~60をB、次に60未満を置くとアウトだったので、空白の条件を先に入れて残りをCにする、という考え方でもアリはアリです。

=IF(B3>=80,”A”,IF(B3>=60,”B”,IF(B3=””,”未実施”,”C”)))

ただ、途中で「空白セルは未実施」という条件を入れるよりは、最初に空白セルは未実施としてしまい、残りの何かしらの数値が入っているセルは順を追ってABC判定を入れた方が、数式をぱっと見た時にどういう条件が組まれているのかよりわかりやすくなると思います。

という事で私としてはこちらのパターンをおすすめしたいです。

=IF(B3=””,”未実施”,IF(B3>=80,”A”,IF(B3>=60,”B”,”C”)))

完成図

こんな風に頭を使いながらああでもないこうでもないと考えるのはそれなりに大変ですが謎解き感覚でやると結構楽しいものです。思った通りに出来上がった時の達成感は大きいですしね。

数式を組みながら考えようとすると手詰まりしやすいので、最初に手書きで設計図を作り、それに沿って式を作成するというようにするとスムーズですよ。

スポンサーリンク