IF 関数 – 入れ子になった式と問題の回避

適用先
Excel for Microsoft 365 Excel for Microsoft 365 for Mac Excel 2024 Excel 2024 for Mac Excel 2021 Excel 2021 for Mac Excel 2019 Excel 2016 Excel Web App Excel for Windows Phone 10

IF 関数を使うと、条件をテストして結果 (True または False) を返すことにより、値と予想値の間の論理的な比較を行うことができます。

  • =IF(条件が True であればある処理を行い、それ以外の場合は別の処理を行う)

そのため、IF ステートメントには 2 つの結果があります。 1 つ目の結果は比較が True の場合であり、2 つ目の結果は比較が False の場合です。

IF ステートメントは非常にしっかりしており、多くのスプレッドシート モデルの基礎になりますが、スプレッドシートの多くの問題の原因でもあります。 理想的には、IF ステートメントは "男性/女性" や "はい/いいえ/不明確" のような最小限の条件に適用する必要がありますが、4 個以上の IF 関数を入れ子*にする必要がある複雑なシナリオの評価が必要になることもあります。

* "入れ子" とは、複数の関数を 1 つの数式で結合する練習を指します。

技術的詳細

論理関数の 1 つである IF 関数を使うと、条件が true または false の場合に、それぞれ別の値を返すことができます。

構文

IF(logical_test, value_if_true, [value_if_false])

次に例を示します。

  • =IF(A2>B2,"予算超過","OK")
  • =IF(A2=B2,B4-A4,"")
引数名 説明
logical_test
(必須)
テストする条件
value_if_true
(必須)
logical_testの結果が TRUE の場合に返す値。
value_if_false
(省略可能)
logical_testの結果が FALSE の場合に返す値。

解説

Excel では最大 64 の異なる IF 関数を入れ子にできますが、そうすることはお勧めできません。 それはなぜでしょうか。

  • 複数の IF ステートメントを正しく構築し、ロジックが各条件を経由し、最後まで正しく計算されるようにするには、膨大な思考が必要になります。 数式を 100% 正確にネストしないと、75% の確率で機能する可能性がありますが、25% の確率で予期しない結果が返されます。 残念ながら、予想外の結果が返される確率が 25% などは低い方です。
  • 複数の IF ステートメントは、保守管理が非常に困難です。自分で作成しようとした式を後から理解するのも難しいですが、他人が作成しようとした式を解明するのはさらに大変です。

IF ステートメントが終わりが見えずに成長し続けているように見える場合は、マウスを置いて戦略を再考する時期が来ました。

複数の IF を使用して複雑な入れ子になった IF ステートメントを適切に作成する方法と、Excel の別のツールを使用する時期を認識するタイミングを見てみましょう。

生徒のテストの点をそれに対応する成績の文字に変換する、比較的標準的な入れ子の IF ステートメントの例を次に示します。

複雑な入れ子になった IF ステートメント - E2 の数式は =IF(B2>97,A+,IF(B2>93,A,IF(B2>89,A-,IF(B2>87,B+,IF(B2>83,B,IF(B2>79,B-,IF(B2>77,C+,IF(B2>73,C,IF(B2>69,C-,IF(B2>57,D+,IF(B2>53,D,IF(B2>49,D-,F))))))))))))

  • =IF(D2>89,"A",IF(D2>79,"B",IF(D2>69,"C",IF(D2>59,"D","F"))))
    この複雑な入れ子の IF ステートメントは、以下のような単純なロジックで構成されています。
  1. テストの点数 (セル D2) が 89 より大きい場合、学生の成績は A です
  2. テストの点数が 79 より大きい場合、学生の成績は B です
  3. テストの点数が 69 より大きい場合、学生の成績は C です
  4. テストの点数が 59 より大きい場合、学生の成績は D です
  5. それ以外の場合、学生の成績は F です

この特定の例は、テストの点数と文字の成績の相関関係が変わる可能性が低いため、多くのメンテナンスが不要であるため、比較的安全です。 しかし、ここで考えてみましょう – A+、A、A- (など) の間で成績をセグメント化する必要がある場合はどうなるでしょうか? 4 つの条件 IF ステートメントを書き換えて 12 の条件にする必要があります。 数式は次のようになります。

  • =IF(B2>97,"A+",IF(B2>93,"A",IF(B2>89,"A-",IF(B2>87,"B+",IF(B2>83,"B",IF(B2>79,"B-", IF(B2>77,"C+",IF(B2>73,"C",IF(B2>69,"C-",IF(B2>57,"D+",IF(B2>53,"D",IF(B2>49,"D-","F"))))))))))))

機能的には正確で、期待どおりに動作しますが、記述に時間がかかり、目的の機能が実行されることを確認するためのテストに時間がかかります。 もう 1 つの明らかな問題は、スコアと同等の文字の成績を手書きで入力しなければならなかったことです。 誤って入力ミスがあった可能性はどのくらいですか? この複雑な条件を 64 回入力することを想像してみてください。 確かに可能ですが、この種の努力や、発見するのが非常に難しい可能性のあるエラーに本当にさらされたいですか?

ヒント

Excel のすべての関数には、開始と終了のかっこ () が必要です。 Excel では、数式を編集するときに数式のさまざまな部分に色を付けることで、何がどこにあるのかを把握できるようにします。 たとえば、上記の数式を編集する場合、カーソルを末尾のかっこのそれぞれの先へ移動すると ")"、対応する左かっこが同じ色に変わります。 これは、一致するかっこが十分にあるかどうかを確認しようとしている場合に、複雑な入れ子になった数式で特に便利です。

その他の例

売上レベルに基づいて販売手数料を計算する非常に一般的な例を次に示します。

セル D9 の数式は、IF(C9>15000,20%,IF(C9>12500,17.5%,IF(C9>10000,15%,IF(C9>7500,12.5%,IF(C9>5000,10%,0) です)))))

  • =IF(C9>15000,20%,IF(C9>12500,17.5%,IF(C9>10000,15%,IF(C9>7500,12.5%,IF(C9>5000,10%,0)))))

この式の意味は、C9 が 15,000 より大きい場合は 20% を返す、C9 が 12,500 より大きい場合は 17.5% を返す...です。

この数式は、以前のGradesの例と非常によく似ていますが、この式は、大きなIFステートメントを維持することがいかに難しいかを示す好例です–organizationが新しい報酬レベルを追加し、場合によっては既存のドルまたはパーセンテージの値を変更することを決定した場合、何をする必要がありますか? あなたはあなたの手にたくさんの仕事をしているでしょう!

ヒント

数式バーで改行を挿入して、長い式を読みやすくすることができます。 改行位置で Alt + Enter キーを押すだけです。

ロジックの順序が正しくない手数料シナリオの例を次に示します。

D9 の数式は、=IF(C9>5000,10%,IF(C9>7500,12.5%,IF(C9>10000,15%,IF(C9>12500,17.5%,IF(C9>15000,20%,0))))) の順が違い ます。 何が問題なのかわかりますか? 収益の比較順序を前の例と比較します。 これはどちらの方向に進んでいるのでしょうか? そうです、ボトムアップ(5,000ドルから15,000ドル)で、その逆ではありません。 しかし、なぜそれがそんなに大きな問題になるのでしょうか? 数式は $5,000 を超える値について最初の評価に合格できないため、これは大きな問題です。 たとえば、収益が $12,500 であるとします。IF ステートメントは $5,000 を超えるため 10% を返し、そこで終わります。 多くの場合、この種のエラーは悪影響を与えるまで気づかれないため、これは非常に問題になる可能性があります。 複雑な入れ子になったIFステートメントには深刻な落とし穴があることを知っているので、何ができるでしょうか? ほとんどの場合、IF 関数を使用して複雑な数式を作成する代わりに、VLOOKUP 関数を使用できます。 VLOOKUP を使用して、まず参照テーブルを作成する必要があります。

セル D2 の式 =VLOOKUP(C2,C5:D17,2,TRUE)

  • =VLOOKUP(C2,C5:D17,2,TRUE)

この式は、C5:C17 の範囲で C2 の値を検索します。 値が見つかった場合は、同じ行の D 列から対応する値を返します。

セル C9 の式は =VLOOKUP(B9,B2:C6,2,TRUE)

  • =VLOOKUP(B9,B2:C6,2,TRUE)

同様に、この式は B2:B22 の範囲でセル B9 の値を探します。 値が見つかった場合は、同じ行の C 列から対応する値を返します。

これらの VLOOKUP は両方とも、数式の末尾で TRUE 引数を使用します。つまり、近似一致を検索するようにしています。 つまり、ルックアップ テーブル内の値、およびそれらの間にある値と完全に一致します。 この場合、ルックアップ テーブルは昇順 (小さいものから大きいもの) で並べ替える必要があります。

VLOOKUP については、 ここではより詳しく説明していますが、これは 12 レベルの複雑な入れ子になった IF ステートメントよりもはるかにシンプルなことは確かです。 他にもあまり目立たない利点があります。

  • VLOOKUP の参照テーブルは開いて簡単に確認できます。
  • テーブルの値は簡単に更新でき、条件が変化しても式を変更する必要はありません。
  • 参照テーブルを他の人に見られたり干渉したりしたくない場合は、別のワークシートに配置します。

ご存じですか?

複数の入れ子になった IF ステートメントを 1 つの関数で置き換えることができる IFS 関数が提供されるようになっています。 最初の成績の例には、次のように 4 つの入れ子になった IF 関数がありました。

  • =IF(D2>89,"A",IF(D2>79,"B",IF(D2>69,"C",IF(D2>59,"D","F"))))

これを、次のように簡単な 1 つの IFS 関数に置き換えることができます。

  • =IFS(D2>89,"A",D2>79,"B",D2>69,"C",D2>59,"D",TRUE,"F")

IFS 関数は、これらの IF ステートメントと括弧のすべてについて心配する必要がないため、優れています。

この機能は、 Microsoft 365 サブスクリプションをお持ちの場合にのみ使用できます。 Microsoft 365 サブスクライバーの場合は、 最新バージョンの Office を使用していることを確認します

補足説明

Excel 技術コミュニティの専門家にいつでも質問するか、コミュニティでサポートを受けることができます。