IF 関数 – 入れ子になった式と問題の回避
適用先
Excel for Microsoft 365 Excel for Microsoft 365 for Mac Excel for the web 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"))))))))))))

それでも機能的に正確であり、期待どおりに動作しますが、書き込みに長い時間がかかり、テストに長い時間がかかり、必要な動作を確認できます。 もう一つの明らかな問題は、スコアと同等の成績を手で入力しなければならなかったということです。 誤って入力ミスが起きる可能性は何ですか? この複雑な条件を 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 ステートメントを維持するのがいかに難しいかを示す優れた例です。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)))))

何が間違っているかを確認できますか? 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で、いつでも専門家に質問できます。また、コミュニティでは、サポートを受けられます。

関連トピック

IFS関数 (Microsoft 365、Excel 2016 以降) COUNTIF関数は、単一の条件に基づいて値をカウントしますCOUNTIFS関数は複数の条件に基づいて値をカウントしますSUMIF関数は単一の条件に基づいて値を合計しますSUMIFS関数は、複数の条件AND 関数OR 関数VLOOKUP 関数Excel の数式のオーバービューに基づいて値を合計します数式の破損を回避する方法数式のエラーを検出する方法Logical 関数Excel 関数 (アルファベット順)Excel 関数 (カテゴリ別)

ヘルプを表示

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

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