スポンサーリンク

Excel 関数IFの複雑な条件を入れ子構造で解決する方法とは?

関数
スポンサーリンク

単一の条件分岐を行う場合は、関数IFを一度使うだけで事足りますが、実際にはもっと複雑に条件が絡む場合が多くあります。

そんな時には関数を入れ子構造にすることで解決することができますが、数式だけで見ても分かりづらいと思いますので、本記事では関数IFの複雑化を入れ子構造で解決する場合の考え方を紹介したいと思います。

入れ子構造とは?

入れ子構造とは、関数の中に関数が入っていて、さらにまた関数が入っているというように、マトリョシカのような構造になっているものを入れ子構造と呼びます。

簡単な例では、

TRIM(RIGHT(A1,4))

といったものが挙げられます。

これは何をしているか?というと、A1セルにある文字列をRIGHT関数で後ろから4桁を抽出し、その結果に対してTRIM関数でスペースを取り除くという動きをしています。

データの挙動の例を挙げると、A1セルに〝テストデータ その1〟と入力されているとします。

すると、RIGHT関数の中身のA1のテキストデータは〝テストデータ その1〟となります。

TRIM(RIGHT(“テストデータ その1“,4))

その状態で、RIGHT関数を実行すると、テキストデータは〝 その1〟となります。

※すこし分かりづらいかもしれませんが、その1の前には半角スペースが入っています。

TRIM(“ その1“)

その後、TRIM関数を実行すると、〝その1〟と半角スペースがなくなった状態が最終出力になります。

“その1”

繰り返しになりますが、このように関数の中に関数を利用することを関数の入れ子構造と言います。

この入れ子構造については、回数制限はありませんので、関数の中に関数、さらにその中に関数、さらにその中に関数・・・・・・・・と続けることも可能です。

関数IFの入れ子構造による条件分岐

関数IFの条件分岐を行う際、偽の部分に入れ子構造で関数IFを中に入れこみ、更にその中に関数IFを入れこみ・・・・・・・と繰り返すことで、複数条件のIF関数として結果を出力することが可能です。

それを図示すると以下のようになります。

これを数式で表記すると、以下のようになります。

IF(A1=”A”, “1”, IF(A1=”B”, “2”, IF(A1=”C”, “3”, IF(A1=”D”, “4”, ………))))

このように、IF関数の中の偽の部分にIF関数を入れるのを繰り返すことで、上図のような条件分岐を繰り返すことが可能です。

繰り返した条件に一致するものではなかった場合に、最終的な出力値を設定するかどうか?で少し記述方法が変わります。

一致しないものだった場合に値を返す場合

一致しないものではなかった場合に、自分が指定した何かしらの値を返す場合、入れ子構造の最下層の〝偽の場合〟の部分に値を指定します。

例)IF(A1=”A”, “1”, IF(A1=”B”, “2”, “一致するものがありません”))

上記例は、分かりやすくするため、2階層の入れ子構造で説明しています。

この場合、A1セルに入力されているデータが〝A〟の場合は〝1〟、A1セルに入力されているデータが〝B〟の場合は〝2〟、それ以外の場合は〝一致するものがありません〟と出力されます。

一致しないものだった場合に値を返さない場合

一致しないものではなかった場合に、自分が指定した何かしらの値を返す場合、入れ子構造の最下層の〝偽の場合〟の部分に空白の文字列を指定します。

例)IF(A1=”A”, “1”, IF(A1=”B”, “2”, “”))

この場合、A1セルに入力されているデータが〝A〟の場合は〝1〟、A1セルに入力されているデータが〝B〟の場合は〝2〟、それ以外の場合は空白が出力されます。

IF(A1=”A”, “1”, IF(A1=”B”, “2”)) このように偽の場合を指定しない方法では駄目でしょうか?

IF関数の偽の場合に指定がない場合、〝FALSE〟が返り値となるので、値を返さない(セルに文字列を表示しない)という目的からは離れてしまいます。

そのため、””で空白の文字列をしていすることで、値を返さないようにすることが可能です。

また、複数条件を指定する関数としてはIFS関数もありますが、こちらは最終項まで分岐して、その条件が偽だった場合、〝#N/A〟が返ります。

まとめ

Excel でIF関数の入れ子構造について紹介しました。

1条件の分岐であれば単体のIF関数で十分ですが、複数の分岐が必要な場合はそれでは不十分です。

そういった複数分岐の方法はいくつかありますが、一番覚えやすいのは今回紹介したIF関数の入れ子構造、あるいはIFS関数です。

使い方を覚えると幅が広がりますよ!

コメント

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