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

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% を返す...です。

以前の成績の例と非常に似ていますが、この数式は、大規模な IF ステートメントを維持することがいかに難しいかを示す優れた例です。組織が新しい報酬レベルを追加し、場合によっては既存のドルまたはパーセンテージの値を変更する場合は、何をする必要がありますか? あなたの手に多くの仕事を持っているだろう!

ヒント: 数式バーで改行を挿入して、長い式を読みやすくすることができます。 改行位置で 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)))))

何が間違っているかを確認できますか? Revenue 比較の順序を前の例と比較します。 この方法はどれですか? 正解です。逆ではなく、ボトムアップ ($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を使用していることを確認してください。Microsoft 365 を購入または試用する

補足説明

Excel Tech Communityで、いつでも専門家に質問できます。また、コミュニティでは、サポートを受けられます。

関連トピック

ビデオ: 高度な IF 関数 IFS 関数 (Microsoft 365、Excel 2016 以降) COUNTIF 関数は、1 つの条件に基づいて値をカウントします COUNTIFS 関数は、複数の条件に基づいて値をカウントします SUMIF 関数は、1 つの条件に基づいて値を合計します SUMIFS 関数は、複数の条件に基づいて値を合計します AND 関数 OR 関数 VLOOKUP 関数 Excel での数式の概要数式の破損を回避する方法数式のエラーを検出する論理関数Excel 関数 (アルファベット順)Excel 関数 (カテゴリ別)

ヘルプを表示

その他のオプションが必要ですか?

サブスクリプションの特典の参照、トレーニング コースの閲覧、デバイスのセキュリティ保護方法などについて説明します。

コミュニティは、質問をしたり質問の答えを得たり、フィードバックを提供したり、豊富な知識を持つ専門家の意見を聞いたりするのに役立ちます。