IF関数を業務ロジックに落とし込む設計パターン集

IF関数を業務ロジックに落とし込む設計パターン集 IT
  1. IF関数=業務ロジックの「翻訳機」|まず押さえるべき考え方と設計の前提
    1. 1) そもそも“何を判定したいのか”を1文で固定する
    2. 2) 入力(条件)と出力(結果)を先に表で整理する
    3. 3) 例外・優先順位を決める(ここを決めないと必ず揉める)
    4. 4) “判断”と“計算”を分けるのが安全(初心者ほど混ぜがち)
    5. 5) テスト前提で作る(“正しさ”は後から証明できない)
  2. 基本パターン編|単純分岐・多段IF・ネストを安全に組む型
    1. 1) 単純分岐(IFの最小単位)|まずは「はい/いいえ」だけにする
    2. 2) 多段IF(段階評価)|「範囲」を上から順に並べる
    3. 3) ネストを安全にする型|“例外→原則”の順で、最後は必ず受け皿を置く
    4. 4) “読めるIF”にする小技|同じ判定は一度だけ書く
  3. 条件整理パターン編|AND/OR・境界値・例外(優先順位)を破綻させない設計
    1. 1) AND/ORは“日本語の括弧”を先に書く|混ぜるほど事故る
    2. 2) 境界値は“ルールを言い切る”|> と >= を人間の言葉で固定する
    3. 3) 例外(優先順位)は“ゲート方式”で上から潰す|先勝ちを設計に使う
    4. 4) 条件が多いときは“条件を部品化”して見通しを作る
  4. 置き換えパターン編|IFS/SWITCH/VLOOKUP(XLOOKUP)/テーブル駆動で“IF地獄”を抜ける
    1. 1) IFS:段階評価は「上から当てる」をそのまま短くする
    2. 2) SWITCH:区分コード→結果の変換は「辞書化」する
    3. 3) VLOOKUP/XLOOKUP:条件分岐を“マスタ参照”に変える
    4. 4) テーブル駆動:条件の組み合わせは「ロジックを表に追い出す」
  5. 運用・拡張パターン編|変更に強い命名・可視化・テスト観点と保守のコツ
    1. 1) 変更に強い命名|“判定セル”に日本語の意味を持たせる
    2. 2) 可視化パターン|“どの条件で決まったか”をログとして残す
    3. 3) テスト観点の型|“境界・例外・未入力”をセットで持つ
    4. 4) 保守のコツ|“直す場所を1か所に寄せる”運用ルールを作る

IF関数=業務ロジックの「翻訳機」|まず押さえるべき考え方と設計の前提

ExcelのIF関数って「条件で結果を返すだけ」でしょ?と思われがちですが、実務では業務ルール(=業務ロジック)を、誰でも実行できる形に翻訳する装置になります。申請の承認可否、手当の支給条件、売上計上タイミング、在庫の補充判断…こうしたルールを“表”に落とし込み、同じ入力なら必ず同じ判断が返るようにする。これがIF関数の役割です。

ただし、IFを「その場しのぎで書き足す」と、すぐに破綻します。分岐が増えるほど読みづらくなり、例外が増えるほどバグりやすくなるからです。だから先に押さえるべきは関数テクではなく、設計の前提です。

1) そもそも“何を判定したいのか”を1文で固定する

まずはIFが答える問いを1つに絞ります。たとえば次のように書ける状態にします。

  • 「この申請は承認?差し戻し?」
  • 「この取引は割引対象?対象外?」
  • 「この勤怠は残業時間を計上?しない?」

ここが曖昧だと、IFの中に「判定」と「計算」と「例外処理」が混ざって、後から誰も直せない“ブラックボックス”になります。

2) 入力(条件)と出力(結果)を先に表で整理する

IFは「=IF(条件, 真のとき, 偽のとき)」ですが、条件をいきなり式で書かないのがコツです。先に入力項目出力パターンを棚卸しします。

  • 入力:雇用形態/勤務時間/曜日/申請種別/金額/締日…
  • 出力:支給/不支給、Aランク/Bランク、手当額、メッセージ…

この時点で「入力が足りない」「出力の定義が曖昧(Aって何?)」といった業務側の穴が見つかります。IFは便利ですが、曖昧なルールを勝手に補完してくれません。むしろ曖昧さをバグとして露呈させます。

3) 例外・優先順位を決める(ここを決めないと必ず揉める)

業務ルールはたいてい「原則+例外」です。ここで重要なのが優先順位

たとえば「10万円以上は割引」でも「ただし新規顧客は対象外」なのか「新規でも10万円以上なら対象」なのかで結果が変わります。IFの設計では、上に書いた条件が先に勝つ(先勝ち)ことが多いので、例外をどちらに置くかはロジックそのものです。

4) “判断”と“計算”を分けるのが安全(初心者ほど混ぜがち)

実務で壊れやすいのは、IFの中でいきなり金額計算までやってしまうケースです。おすすめは次の分離です。

  • 判定列:条件を満たすか(TRUE/FALSE、OK/NG、区分A/Bなど)
  • 計算列:判定列の結果を使って金額や文言を出す

こうすると、テストが一気に楽になります。「判定は合ってるけど計算が違う」のように原因を切り分けできるからです。

5) テスト前提で作る(“正しさ”は後から証明できない)

IFは書いた瞬間は動きます。でもそれが業務として正しいかは別問題。だから最初からテストケースを用意します。

  • 通常ケース(原則どおり)
  • 境界値(ちょうど10万円、ちょうど締日、0時間など)
  • 例外(対象外条件、エラー入力、空白)

「この3パターンで結果が合えばOK」という状態にしてから式を組むと、変更が入っても崩れにくいです。20代のうちにここを習慣化すると、Excelが“作業ツール”から“設計ツール”に変わります。

この章のまとめはシンプルです。IF関数は、業務ロジックを式にする前に、言葉と表で設計する。次章からは、その設計を崩さずに実装するための「安全な型(パターン)」を、具体的な分岐の組み方として整理していきます。

基本パターン編|単純分岐・多段IF・ネストを安全に組む型

1章で「業務ロジックを言葉と表で設計してからIFを書く」と整理しました。ここからは実装フェーズ。ポイントは、“動く式”ではなく“壊れにくい式”の型で組むことです。とくに20代の現場だと、後から条件が増えたり、別の人に引き継がれたりが普通に起きます。最初から安全な並べ方で作っておくと、手戻りが激減します。

1) 単純分岐(IFの最小単位)|まずは「はい/いいえ」だけにする

基本はこれだけです。

=IF(条件, 真の結果, 偽の結果)

実務でのコツは、条件を“文章に戻せる形”で書くこと。例えば「金額が10万円以上なら割引対象」はこう。

=IF(A2>=100000,"割引","通常")

さらに安全にするなら、真偽を先に作ってから結果に変換します(1章の「判断と計算を分ける」に沿うやり方)。

  • 判定列:=A2>=100000(TRUE/FALSE)
  • 結果列:=IF(B2,"割引","通常")

2) 多段IF(段階評価)|「範囲」を上から順に並べる

評価ランクや手当の等級など、段階があるとIFが増えます。ここでの型は「上位から順に判定」です。例えば点数でA/B/Cを返すなら、上から当てていきます。

=IF(A2>=80,"A",
 IF(A2>=60,"B",
 "C"))

理由はシンプルで、条件の重なりを吸収しやすいからです。もし下から書くと「60点以上」を先に拾ってしまい、80点以上が到達しません。業務ルールにありがちな「含む/含まない」も、上から並べるとミスが減ります。

3) ネストを安全にする型|“例外→原則”の順で、最後は必ず受け皿を置く

ネスト(IFの入れ子)が崩れる典型は、「途中で条件が漏れる」「空白や欠損値で想定外の判定になる」ケースです。そこで型を固定します。

  • 最優先の例外(入力不足、対象外、エラー扱い)
  • 原則の判定(通常ルール)
  • 最後の受け皿(どれにも当てはまらないとき)

例:申請ステータスを返す(入力が空なら確認依頼、金額が高ければ上長承認、それ以外は通常承認)。

=IF(A2="","要確認(未入力)",
 IF(A2>=300000,"上長承認",
 "通常承認"))

最後の受け皿(この例だと「通常承認」)を必ず置くと、想定外データが来ても“沈黙しない”式になります。沈黙=空白返しを多用すると、後工程で「処理されてないのに気づけない」事故が起きがちです。

4) “読めるIF”にする小技|同じ判定は一度だけ書く

ネストが長くなると、同じ条件を何度も書きがちですが、保守性が落ちます。おすすめは判定を別セルに切り出すこと。たとえば「大口=10万以上」をB列に置けば、後続はB列を見るだけになります。

(B2)=A2>=100000
(C2)=IF(B2,"大口","通常")

こうしておくと、閾値が変わったときも修正箇所が1つで済みます。

ここまでが「IFを安全に組む基本形」です。次章では、さらに壊れやすいAND/ORの絡み境界値、そして例外の優先順位をどう整理すれば破綻しないかを、設計パターンとして掘り下げます。

条件整理パターン編|AND/OR・境界値・例外(優先順位)を破綻させない設計

IFが急に難しくなるのは、「条件が増える」瞬間ではなく、条件同士が絡み始める瞬間です。たとえば「AかつB」「AまたはB」「ちょうど10万円はどっち?」「原則OKだけどこの場合だけNG」——ここを雑に書くと、式は動いても業務として間違います。この章は、破綻ポイントを整理してから実装する型をまとめます。

1) AND/ORは“日本語の括弧”を先に書く|混ぜるほど事故る

まずやるべきは、条件を式にする前に日本語で括弧つきにすることです。

  • 例:承認条件=「(金額が10万以上 かつ 部署が営業)または(役職が部長)」

これをそのままExcelに移すと、こうなります。

=IF( OR( AND(A2>=100000, B2="営業"), C2="部長"), "承認", "差し戻し")

コツは、ANDとORを1行に混在させないこと。混ざるなら、上の例のようにANDの塊を作ってからORで束ねます(括弧を作るイメージ)。読めるだけでなく、後から条件追加するときも「どの塊に足すか」が明確になります。

2) 境界値は“ルールを言い切る”|> と >= を人間の言葉で固定する

実務で一番揉めるのが境界値です。「10万円以上」が10万円ちょうどを含むのか、含まないのか。ここを曖昧にすると、担当者ごとに解釈が割れて数字が合いません。

型としては、範囲を重ねない(どれか1つに必ず落ちる)ように切ります。例:ランク判定。

  • A:80以上
  • B:60以上80未満
  • C:60未満
=IF(A2>=80,"A",
 IF(A2>=60,"B",
 "C"))

さらに事故が減るのは、境界値のテストケースを先に作ることです。

  • 59 / 60 / 79 / 80 を入れて、期待結果が合うか確認
  • 金額なら 99999 / 100000 / 100001 を必ず試す

境界値は「合ってるはず」で通すと、後で精算・監査系で痛い目を見ます。若手のうちに“境界は必ず試す”を癖にすると強いです。

3) 例外(優先順位)は“ゲート方式”で上から潰す|先勝ちを設計に使う

例外があるロジックは、いきなり原則を書かずに通行止め(ゲート)から並べると破綻しません。

具体的には次の順番です。

  1. 入力不備・判定不能(空白、エラー、マスタ未登録)
  2. 最優先のNG(対象外)
  3. 特例OK(例外的に通す条件)
  4. 原則OK/NG

例:「原則:10万円以上は割引」「例外:社員は割引対象外」「特例:ただし社員でも役員は割引OK」なら、優先順位をそのまま上から書きます。

=IF(A2="","要確認(未入力)",
 IF(B2="社員",
   IF(C2="役員","割引", "対象外"),
 IF(A2>=100000,"割引","通常")))

ポイントは、“例外をどこに置くか”が設計そのものということ。IFは上に書いた条件が先に勝つので、ゲートの順番を固定すると「例外を足したせいで原則が壊れる」を防げます。

4) 条件が多いときは“条件を部品化”して見通しを作る

AND/ORや例外が絡むと、1セルに全部詰め込むだけで読みづらくなります。そこでおすすめなのが、判定を部品(TRUE/FALSE)に分ける方法です。

  • (D2)大口:=A2>=100000
  • (E2)社員:=B2="社員"
  • (F2)役員:=C2="役員"
  • (G2)割引可:=OR(AND(D2,NOT(E2)),AND(E2,F2))
  • (H2)結果:=IF(G2,"割引","通常")

この形だと、どこで判断がひっくり返ったかが追えます。つまり、デバッグできるIFになります。次章では、この「部品化」をさらに進めて、IFS/SWITCHやテーブル駆動で“IF地獄”をそもそも回避する置き換えパターンに入ります。

置き換えパターン編|IFS/SWITCH/VLOOKUP(XLOOKUP)/テーブル駆動で“IF地獄”を抜ける

ここまでで「IFを壊さずに組む型」は押さえました。ただ、条件が増え続ける現場では、どうしてもネストが深くなり、読みにくさが限界に来ます。そこで4章は発想を変えて、IFを減らす(置き換える)パターンを紹介します。ポイントは、ロジックを“式”から“構造(表)”に逃がすこと。これだけで保守コストが一段下がります。

1) IFS:段階評価は「上から当てる」をそのまま短くする

多段IF(ランク判定など)は、IFSで見た目がかなりスッキリします。

=IFS(A2>=80,"A", A2>=60,"B", TRUE,"C")
  • 上から順に「真になったらそこで確定」
  • 最後はTRUEを受け皿にして、想定外でも沈黙しない

ネストのカッコ地獄が消えるので、レビューされやすい式になります。

2) SWITCH:区分コード→結果の変換は「辞書化」する

申請種別やステータスなど、値が離散的(A/B/C、1/2/3)ならSWITCHが強いです。

=SWITCH(B2,
 "A","通常承認",
 "B","上長承認",
 "C","差し戻し",
 "要確認(未定義)")

IFで「B2=”A”」を並べるより、対応表を書いている感覚に近く、漏れにも気づきやすい。コード体系が増えがちな業務ほど効きます。

3) VLOOKUP/XLOOKUP:条件分岐を“マスタ参照”に変える

「このコードならこの単価」「この社員区分ならこの手当率」みたいなルールは、IFで書くより表で持つのが正攻法です。式は参照に徹します。

=XLOOKUP(C2, マスタ[区分], マスタ[手当額], "未登録")

これが効くのは、ルール変更時に式を直さずに表を差し替えられるから。監査や引き継ぎでも「どの表が根拠か」が明確になります(式の中に根拠が埋まらない)。

4) テーブル駆動:条件の組み合わせは「ロジックを表に追い出す」

AND/ORが絡み、パターンが増えたら最終的にここです。やり方はシンプルで、入力から“キー”を作り、キーで結果表を引く

  • キー列:=D2&"_"&E2(例:雇用形態_役職)
  • 結果:=XLOOKUP(キー, ルール表[キー], ルール表[結果], "要確認")

すると、例外追加は「表に1行足す」で済みます。IFだと例外を差し込む位置(優先順位)で事故りますが、テーブル駆動なら優先順位も列として管理できます(例:優先度の高い行から当てる、など)。

まとめると、IFS=段階、SWITCH=区分、LOOKUP=マスタ、テーブル駆動=組み合わせ。IFを“頑張って読みやすくする”から、“そもそもIFを持たない”へ。次章では、この仕組みを運用で壊さないための命名・可視化・テスト観点に進みます。

運用・拡張パターン編|変更に強い命名・可視化・テスト観点と保守のコツ

IF(やIFS/SWITCH、テーブル駆動)を組んだ瞬間は完成に見えますが、実務はここからが本番です。ルール変更、例外追加、担当交代——この3つが来ても崩れないように、「読める」「追える」「試せる」状態で運用するのが5章のゴールです。

1) 変更に強い命名|“判定セル”に日本語の意味を持たせる

3章で出した「判定を部品化(TRUE/FALSEに分ける)」は、運用面でも強力です。コツは、部品に意味が読める名前を付けること。

  • 列見出し例:未入力?対象外?大口?例外OK?最終判定
  • 名前の型:「名詞+?」(TRUE/FALSEが自然に読める)

例えば「大口=10万以上」が変わっても、直すのは 大口? の列だけ。結果側の式は触らずに済みます。若手がやりがちな「式の中に閾値が散らばる」状態を避けられます。

2) 可視化パターン|“どの条件で決まったか”をログとして残す

保守で一番詰むのは、「なぜこの結果になった?」が追えないことです。そこでおすすめが、結果と一緒に理由(判定根拠)も返す設計。

  • 結果列:承認/差し戻し
  • 理由列:未入力/対象外/例外OK/原則OK…

IFの先勝ち(上に書いた条件が勝つ)を利用して、理由を先に確定させます。

=IFS(
 A2="","未入力",
 B2="社員","対象外",
 AND(B2="社員",C2="役員"),"例外OK",
 A2>=100000,"原則OK",
 TRUE,"その他")

これがあるだけで、問い合わせ対応が速くなります。「この人だけ割引にならない」→理由セルを見れば一発、という状態を作れます。

3) テスト観点の型|“境界・例外・未入力”をセットで持つ

1章で「テスト前提で作る」が出ましたが、運用ではテストケースを資産化します。おすすめは別シートに「入力→期待結果→実結果→OK/NG」を置くやり方です。

  • 境界:99999 / 100000 / 100001
  • 例外:社員、役員など優先順位が絡む値
  • 未入力・異常:空白、0、マスタ未登録

結果セルと理由セルの両方をチェックすれば、「結果は合ってるけど根拠がズレてる(将来の変更で壊れる予兆)」も拾えます。

4) 保守のコツ|“直す場所を1か所に寄せる”運用ルールを作る

最後に、変更を安全に受けるための実務ルールです。

  • 閾値・対応表はマスタ(表)に寄せる(式に直書きしない)
  • 例外追加は「式に差し込み」ではなく表に1行追加を優先(4章のテーブル駆動が効く)
  • 変更したらテストシートだけ回せば良い状態にする(属人化を潰す)

IFは書ける人がいるだけでは回りません。誰が触っても壊れない形にして初めて、業務ロジックとして“使える”。命名・理由の可視化・テストの3点セットで、IF(とその置き換えパターン)を運用に耐える設計へ仕上げましょう。

コメント

NewsTowerをもっと見る

今すぐ購読し、続きを読んで、すべてのアーカイブにアクセスしましょう。

続きを読む