ExcelのネストされたIF文 - 例、ベストプラクティス、代替案

  • これを共有
Michael Brown

このチュートリアルでは、Excelで入れ子になったIF関数を使って複数の条件をチェックする方法を説明します。 また、Excelで入れ子になった数式を使う代わりになる他のいくつかの関数も学びます。

Excelのワークシートで、意思決定のロジックをどのように実装しますか? ほとんどの場合、IF式を使って条件をテストし、条件を満たした場合はある値を、条件を満たさない場合は別の値を返します。 複数の条件を評価し、結果に応じて異なる値を返すには、複数のIFを互いに入れ子にして使用します。

このチュートリアルでは、Excelで複数の条件をチェックする唯一の方法ではない、いくつかの代替方法を紹介します。

    エクセルのネストされたIF文

    ここでは、Excelの古典的なネストされたIF式の一般的な形式を紹介します。

    IF( 条件1 , 結果1 , IF( 条件2 , リザルト2 , IF( 条件3 , 結果3 , リザルト4 )))

    後続の各IF関数に埋め込まれていることがわかります。 value_if_false 各IF関数は独自の括弧で囲まれていますが、すべての閉じ括弧は数式の最後にあります。

    この一般的なネストされたIF式は、3つの条件を評価し、4つの異なる結果を返します(いずれの条件もTRUEでない場合は結果4が返されます)。 人間の言葉に置き換えると、このネストされたIF文はExcelに以下のことを指示することになります。

    テスト 条件1 TRUE の場合 - を返す。 結果1 FALSEの場合

    テスト 条件2 TRUE の場合 - r を返す エスアルトツー FALSEの場合

    テスト 条件3 TRUE の場合 - を返す。 結果3 FALSEの場合

    もどる リザルト4

    例として、多数の販売者の販売額から手数料を割り出してみましょう。

    委員会 売上高
    3% $1 - $50
    5% $51 - $100
    7% $101 - $150
    10% 150ドル以上

    数学では、足し算の順序を変えても合計は変わりませんが、ExcelではIF関数の順序を変えると結果が変わります。 なぜかというと、入れ子になったIF式は、そのIF式に対応する値を返すからです。 一次真値 したがって、ネストされたIF文では、式のロジックに応じて、条件を正しい方向に並べることが非常に重要です。 この例では、まず「最高」の条件をチェックし、次に「2番目に高い」条件、といった具合に並べます。

    =IF(B2>150, 10%, IF(B2>=101, 7%, IF(B2>=51, 5%, IF(B2>=1, 3%, ""))) ))

    例えば、売上高が100ドルで、それが1より大きい場合、数式は他の条件をチェックせず、結果として3%を返します。

    もし、条件を低いものから高いものへと並べたいのであれば、「less than」演算子を使って、「最も低い」条件を最初に評価し、次に「2番目に低い」条件、といった具合に評価します。

    =IF($B2<1, 0%, IF($B2<51, 3%, IF($B2<101, 5%, IF($B2<=150, 7%, 10%))) ))

    このように、ネストされたIF文のロジックを最後まで正しく構築するには、かなりの思考が必要です。 また、Microsoft Excelでは1つの数式に最大64個のIF関数をネストできますが、ワークシートではあまりやりたくありません。 そこで、もしあなたが(あるいは他の誰かが)、ExcelのネストしたIF式が実際に何を行っているかを理解しようと見つめているなら、それは時間切れです。そのため、このような場合、別のツールを選択することになります。

    詳しくは、ExcelのネストされたIF文をご覧ください。

    OR/AND条件を含むネストされたIF

    異なる条件の組み合わせを評価する場合、OR関数とAND関数を使って条件を表現し、IF文の中に関数を入れ、さらにIF文同士を入れ子にして評価することができます。

    ExcelでOR文のネストされたIF

    OR関数を使用すると、各IF関数の論理テストで2つ以上の異なる条件をチェックし、OR引数のいずれか(少なくとも1つ)がTRUEと評価されればTRUEを返すことができます。 実際の動作を見るために、次の例を考えてみてください。

    例えば、1月の売上をB列、2月の売上をC列とした場合、両列の数字をチェックし、高い方の数字でコミッションを計算したいとします。 つまり、1月または2月の売上が150ドル以上の場合、売り手は10%のコミッションを受け取り、1月または2月の売上が以下の場合、売り手は10%のコミッションを受け取る、という論理で数式を作成します。101ドルで、売り手は7%の手数料を得る、というように。

    これを実行させるには、OR(B2>150, C2>150) のような OF 文をいくつか書いて、上で述べた IF 関数の論理テストの中に入れ込む。 その結果、次の式になる。

    =IF(OR(B2>150, C2>150), 10%, IF(OR(B2>=101, C2>=101),7%, IF(OR(B2>=51, C2>=51), 5%, IF(OR(B2>=1, C2>=1),3%, ""))))

    そして、高い方の売上額に基づいてコミッションを割り当ててもらう。

    その他の計算式の例については、Excel IF OR 文をご覧ください。

    ExcelのAND文によるIFのネスト

    論理テストに複数の条件があり、それらの条件がすべて「真」と評価されるべき場合は、AND関数を用いて表現します。

    例えば、売上高が少ない場合に手数料を割り当てるには、上記の数式をORからAND文に置き換えます。 つまり、1月と2月の売上高が150ドル以上の場合にのみ10%、101ドル以上の場合には7%、といった具合にExcelに指示するのです。

    =IF(AND(B2>150, C2>150), 10%, IF(AND(B2>=101, C2>=101), 7%, IF(AND(B2>=51, C2>=51), 5%, IF(AND(B2>=1, C2>=1), 3%, "")) ) )

    その結果、ネストされたIF式は、B列とC列の低い方の数字に基づいてコミッションを計算する。いずれかの列が空の場合、AND条件が満たされないのでコミッションは全く発生しない。

    空白セルの代わりに0%を返したい場合は、最後の引数の空文字列('')を0%に置き換える。

    =IF(AND(B2>150, C2>150), 10%, IF(AND(B2>=101, C2>=101), 7%, IF(AND(B2>=51, C2>=51), 5%, IF(AND(B2>=1, C2>=1), 3%, 0%)) ) ) )

    詳しくはこちら:Excel IF with multiple AND/OR conditions.

    ExcelでネストされたIFの代わりにVLOOKUPを使用する

    スケール」、つまり連続した数値の範囲をまとめて扱う場合、ほとんどの場合、ネストしたIFの代わりにVLOOKUP関数を使用することができます。

    まず、以下のスクリーンショットのような参照テーブルを作成し、Vlookup 式を作成します。 近似一致 である。 レンジルック 引数を TRUE に設定する。

    ルックアップ値がB2、参照テーブルがF2:G5とすると、計算式は次のようになる。

    =vlookup(b2,$f$2:$g$5,2,true)です。

    を修正していることにご留意ください。 table_array を絶対参照($F$2:$G$5)で指定すると、数式が他のセルに正しくコピーされます。

    Vlookup式の最後の引数をTRUEに設定することで、Excelに次のような検索を指示します。 さいきんしん - 完全一致しない場合は、ルックアップテーブルの値より小さい、次に大きな値を返します。 その結果、数式はルックアップテーブルの完全な値だけでなく、その間にあるすべての値にも一致するようになります。

    例えば、B3のルックアップ値は$95です。 この数値はルックアップ・テーブルには存在しないため、完全一致のVlookupはこの場合#N/Aエラーを返します。 しかし近似一致のVlookupは、ルックアップ値より小さい最も近い値(この例では$50です)を見つけるまで検索し、同じ行の2列目の値(これは5%です)を返します。

    しかし、ルックアップ値がルックアップテーブルの最小の数値より小さい場合や、ルックアップセルが空の場合はどうでしょうか。 この場合、Vlookup式は#N/Aエラーを返します。 実際に望むものではない場合、IFERRORの中にVLOOKUPを入れ、ルックアップ値が見つからない場合に出力する値を供給します。 例えば、次のようになります。

    =IFERROR(VLOOKUP(B2, $F$2:$G$5, 2, TRUE), "範囲外")

    重要!近似一致のVlookup式が正しく動作するためには、ルックアップテーブルの最初の列は、ソートが しょうじゅんれい 小さいものから順に

    詳しくは、「完全一致VLOOKUP vs. 近似一致VLOOKUP」をご覧ください。

    ネストされたIF関数に代わるIFSステートメント

    Excel 2016以降のバージョンでは、Microsoftは複数の条件を評価する特殊な関数、IFS関数を導入しました。

    IFSの数式は最大127個まで扱うことができる 論理テスト / value_if_true のペアがあり、最初にTRUEと評価された論理テストが「勝ち」です。

    IFS(logical_test1, value_if_true1, [logical_test2, value_if_true2]...)

    上記の構文に従って、我々の入れ子IF式はこのように再構築することができる。

    =IFS(B2>150, 10%, B2>=101, 7%, B2>=51, 5%, B2>0, 3%)

    IFS関数は、指定された条件を満たさない場合、#N/Aエラーを返すことに注意してください。 これを回避するために、もう1つの 論理テスト / value_if_true を式の末尾に追加すると、前の論理テストのいずれもが TRUE でない場合に、0 または空文字列 ("") など、任意の値を返します。

    =IFS(B2>150, 10%, B2>=101, 7%, B2>=51, 5%, B2>0, 3%, TRUE, "")

    その結果、B列の対応するセルが空であるか、テキストまたは負の数を含む場合、この数式は#N/Aエラーではなく、空の文字列(空白セル)を返すようになるのです。

    注:ExcelのIFS関数は、ネストされたIFと同様に、最初にTRUEと評価された条件に対応する値を返します。

    詳しくは、「ネストしたIFの代わりにExcel IFS関数」をご覧ください。

    ExcelでネストしたIF式の代わりにCHOOSEを使用する

    Excel で 1 つの数式内で複数の条件をテストするもう 1 つの方法は、CHOOSE 関数を使用することです。これは、その値の位置に基づいてリストの中から値を返すように設計されています。

    今回のサンプルデータセットに適用すると、以下のような形になる。

    =CHOOSE((B2>=1) + (B2>=51) + (B2>=101) + (B2>150), 3%, 5%, 7%, 10%)

    第1引数で( インデックス・ナンバー TRUEは1、FALSEは0に相当することから、この方法で返すべき値の位置を計算する。

    例えば、B2の値が150ドルの場合、最初の3つの条件はTRUEで、最後の条件(B2>150)はFALSEです。 ですから、次のようになります。 インデックスナンバー は3に等しく、3番目の値、つまり7%が返されることを意味します。

    ヒント:どの論理テストもTRUEでない場合。 インデックスナンバー は0に等しいので、数式は#VALUE! エラーを返します。 簡単な修正は、CHOOSEをIFERROR関数で次のようにラップすることです。

    =IFERROR(CHOOSE((B2>=1) + (B2>=51) + (B2>=101) + (B2>150), 3%, 5%, 7%, 10%), "")

    詳しくは、Excel CHOOSE関数(計算式例付き)をご覧ください。

    ExcelのネストされたIFの簡潔な形式としてのSWITCH関数

    スケールではなく、あらかじめ定義された固定値のセットを扱う状況では、SWITCH関数は、複雑なネストされたIF文に代わるコンパクトな選択肢となり得ます。

    SWITCH(式、値1、結果1、値2、結果2、・・・、[デフォルト])

    SWITCH関数は、以下を評価します。 のリストに対して 価値観 を返します。 出来栄え は,最初に見つかったマッチに対応する。

    売上金額ではなく、以下の等級に基づいて手数料を計算したい場合、このコンパクト版の入れ子IF式をエクセルで使用することができます。

    =switch(c2, "a", 10%, "b", 7%, "c", 5%, "d", 3%, "")

    あるいは、以下のスクリーンショットに示すような参照テーブルを作成し、ハードコードされた値の代わりにセル参照を使用することができます。

    =switch(c2, $f$2, $g$2, $f$3, $g$3, $f$4, $g$4, $f$5, $g$5, "")

    数式を他のセルにコピーする際に参照先が変更されないように、最初の参照先以外を$記号でロックしていることに注意してください。

    注)SWITCH機能は、Excel2016以降でのみ利用可能です。

    詳しくは、SWITCH関数 - 入れ子IF文のコンパクトな形 をご覧ください。

    Excelで複数のIF関数を連結する

    先の例で述べたように、SWITCH関数はExcel 2016でのみ導入されました。 古いバージョンのExcelで同様の作業を行うには、Concatenate演算子(&)やCONCATENATE関数を使って、2つ以上のIF文を結合することができます。

    例えば、こんな感じです。

    =(IF(C2="a", 10%, "") & IF(C2="b", 7%, "") & IF(C2="c", 5%, "") & IF(C2="d", 3%, "")))*1

    または

    =CONCATENATE(IF(C2="a", 10%, ""), IF(C2="b", 7%, ""), IF(C2="c", 5%, "") & IF(C2="d", 3%, "")))*1

    お気づきのように、どちらの式でも結果に1を掛けています。 これは、Concatenate式が返す文字列を数値に変換するために行います。 期待する出力がテキストの場合は、乗算操作は必要ありません。

    詳しくは、ExcelのCONCATENATE関数をご覧ください。

    このチュートリアルで、ワークシートでIF式を活用するためのヒントが得られたと思います。 このチュートリアルで取り上げた例を詳しく見るには、以下のサンプルワークブックをダウンロードしてください。 読んでいただきありがとうございます。

    練習用ワークブック(ダウンロード

    ExcelのネストされたIf文 - 例 (.xlsxファイル)

    Michael Brown は、ソフトウェア ツールを使用して複雑なプロセスを簡素化することに情熱を注ぐ熱心なテクノロジー愛好家です。テクノロジー業界で 10 年以上の経験があり、Microsoft Excel と Outlook、さらに Google Sheets と Docs のスキルを磨いてきました。 Michael のブログは、彼の知識と専門知識を他の人と共有することに特化しており、生産性と効率を向上させるためのわかりやすいヒントとチュートリアルを提供しています。経験豊富なプロフェッショナルであろうと初心者であろうと、Michael のブログでは、これらの重要なソフトウェア ツールを最大限に活用するための貴重な洞察と実践的なアドバイスを提供しています。