「IFはわかるけど、IFSとどう違うの?」「VLOOKUPのエラー、IFERRORとIFNAどっちで消すべき?」。スプレッドシートで条件分岐を書いていると、毎回こんな迷いにぶつかりますよね。
そのたびに別々の記事を読み比べていると、結局「自分の数式にはどれを使えばいいか」が決まらないまま時間だけが過ぎてしまいます。
この記事では、Googleスプレッドシートの条件分岐に登場する6つの関数(IF・IFS・IFERROR・IFNA・AND・OR)を1ページで横串に整理します。選び方フローチャート、6関数の比較表、実務でよく使う5つの組み合わせパターンまでまとめて確認できますよ。
スプレッドシートの条件分岐関数は6つで足りる
スプレッドシートで「条件によって表示を変える」「エラーをきれいに処理する」シーンは、実は6つの関数でほぼ全部カバーできます。
IF・IFS・IFERROR・IFNA・AND・ORの役割
それぞれの役割をひとことで説明すると、次のとおりです。
- IF:条件が1つのときに、結果を2つに分岐させる
- IFS:条件が複数あるときに、結果をフラットに分岐させる
- IFERROR:数式がエラーになったとき、すべてのエラーを代替値に置き換える
- IFNA:数式が #N/A エラーになったときだけ、代替値に置き換える
- AND:複数の条件をすべて満たすときに TRUE を返す
- OR:複数の条件のいずれかを満たすときに TRUE を返す
まずは「結果を分岐させる関数」と「エラーを処理する関数」の2グループに分かれていることを押さえてみてください。
なぜこの6関数で「迷いどころ」を全部カバーできるか
実務で条件分岐に迷う場面は、突き詰めると次の3つに集約されます。
- 条件が1つか、複数か
- 結果を分岐したいのか、エラーを処理したいのか
- エラー処理の対象は、すべてのエラーか、それとも #N/A だけか
この3つの軸さえ決まれば、6関数のうちの1つにたどり着けます。逆にいうと、迷子になる原因の多くは「自分が今どの軸で考えているか」が整理できていないからなんですよね。
各関数の詳しい使い方は、それぞれの個別記事にまとまっています。
- スプレッドシートのIF関数の使い方
- スプレッドシートのIFS関数の使い方
- スプレッドシートのIFERROR関数の使い方
- スプレッドシートのIFNA関数の使い方
- スプレッドシートのAND関数
- スプレッドシートのOR関数
IF・IFS・IFERROR・IFNAの違いを1枚の比較表で整理
最初に、6関数の機能を1枚にまとめた比較表を見てみましょう。「どの関数を選ぶか」を判断するときの早見表として使ってください。
6関数の機能比較表
| 関数 | 主な目的 | 条件数 | 戻り値 | エラー処理 | Excel互換 |
|---|---|---|---|---|---|
| IF | 結果を2分岐 | 1つ | TRUE値 / FALSE値 | しない | あり |
| IFS | 結果を3分岐以上 | 複数 | 最初に TRUE になった値 | しない(全FALSEで #N/A) | Excel 2019・365以降 |
| IFERROR | 全エラーの非表示 | — | 元の値 / 代替値 | する(全エラー) | あり |
| IFNA | #N/A だけ非表示 | — | 元の値 / 代替値 | する(#N/A のみ) | あり |
| AND | 複数条件を「すべて満たす」で結合 | 複数 | TRUE / FALSE | しない | あり |
| OR | 複数条件を「いずれか満たす」で結合 | 複数 | TRUE / FALSE | しない | あり |
ポイントは「目的」と「条件数」の組み合わせで関数が決まる、というところです。
「結果を分岐させる関数」と「エラーを処理する関数」の境界線
6関数のうち、IF・IFS・AND・ORの4つは結果を分岐させる関数です。論理式を評価して、その結果に応じた値を返してくれます。
一方、IFERROR・IFNAの2つはエラーを処理する関数です。数式がエラーになったときの代替値を指定する役割しかありません。
この境界線を意識すると、たとえば「VLOOKUPの#N/Aを”該当なし”と表示したい」場面で迷わずに済みます。エラー処理が目的なら IFERROR か IFNA、結果の分岐が目的なら IF か IFS、というふうに迷いなく選べますよ。
TIP
ANDとORは単体だと TRUE / FALSE しか返しません。値を分岐させたいときは、必ず IF や IFS と組み合わせて使うのがポイントです。
迷ったらこのフローチャート|条件分岐関数の選び方
ここからは、3ステップで6関数のうちの1つに絞り込むフローチャートを紹介します。
3ステップで使う関数を絞り込む
質問は3つだけです。
- 目的は「結果の分岐」?それとも「エラー処理」?
- 結果の分岐 → ステップ2へ
- エラー処理 → ステップ3へ
- 条件は1つだけ?それとも複数?
- 1つだけ → IF を使う
- 複数 → IFS を使う(または IF + AND/OR の組み合わせ)
- 対象は「すべてのエラー」?それとも「#N/A だけ」?
- すべてのエラーをまとめて処理 → IFERROR
- #N/A だけピンポイントで処理 → IFNA
ANDとORは「条件が複数」のステップ2で「IFと組み合わせる関数」として登場します。単独で関数を選ぶ位置にはありませんよ。
フローチャート(Mermaid図解)
flowchart TD
Start[スプレッドシートで<br>条件分岐したい] --> Q1{目的は?}
Q1 -->|結果の分岐| Q2{条件はいくつ?}
Q1 -->|エラー処理| Q3{対象のエラーは?}
Q2 -->|1つ| IF[IF関数]
Q2 -->|複数| IFS[IFS関数<br>または IF+AND/OR]
Q3 -->|すべて| IFERROR[IFERROR関数]
Q3 -->|#N/Aのみ| IFNA[IFNA関数]
このフローを通せば、6関数のどれを使うかが必ず1つに決まります。
参考までに、各関数のさらに詳しい使い方は個別記事にまとまっています。 IF関数の基本 や IFS関数のフラットな書き方 もあわせてどうぞ。
実務でよく使う5つの組み合わせパターン
ここからは、実務でよく登場する5つのパターンを数式付きで紹介します。受注管理表や成績表など、ほぼ毎日使うシーンばかりですよ。
パターン1:IF + AND/ORで複数条件を1つにまとめる
「在庫が10個以上 かつ 単価が1000円以下のときだけ販売可とする」のように、複数の条件をすべて満たす場合は AND を使います。
=IF(AND(B2>=10, C2<=1000), "販売可", "停止")
「在庫が0 または 廃番のとき停止」のように、いずれかを満たす場合は OR を使います。
=IF(OR(B2=0, D2="廃番"), "停止", "販売可")
ANDとORは IF の中で論理式の役割を果たすだけなので、戻り値そのものを変えたいときは必ず IF と組み合わせてくださいね。
NOTE
ARRAYFORMULAと組み合わせる場合は、AND の代わりに
、OR の代わりに+演算子を使う必要があります。=ARRAYFORMULA(IF((B2:B>=80)(C2:C>=80), "合格", "不合格"))のように書きます。
詳しい組み合わせパターンは AND関数 ・ OR関数 の個別記事も参照してください。
パターン2:IFERROR + VLOOKUPでエラーを一括非表示
VLOOKUPで単価マスタを引いてくる定番パターンです。マスタにない商品コードを渡すと #N/A が返るので、IFERROR で隠してしまいます。
=IFERROR(VLOOKUP(A2, マスタ!A:B, 2, FALSE), "マスタ未登録")
このパターンの良さは、列番号ミスや参照範囲のずれなど、どんなエラーでも代替値に置き換えてくれるところです。
ただし副作用もあります。本当は数式の組み立てミスで #REF! が出ているのに、それも「マスタ未登録」と表示してしまうので、原因究明が遅れる可能性があるんですよね。
「とにかくエラーを表に出したくない」場面では IFERROR が便利ですが、検証中の数式では使わないほうが安全です。
詳しい組み合わせは IFERROR関数の使い方 や VLOOKUPで別シートを参照する完全ガイド にまとまっています。
パターン3:IFNA + XLOOKUPで「マスタ未登録だけ」をピンポイント代替
「マスタにない商品だけは”未登録”と表示したい。でも、数式ミスのエラーは見逃したくない」。そんなときに使うのが IFNA + XLOOKUP の組み合わせです。
=IFNA(XLOOKUP(A2, マスタ!A:A, マスタ!B:B), "未登録")
IFNA は #N/A エラーだけを代替値に置き換える関数です。#REF! や #VALUE! などの数式ミス起因のエラーはそのまま残るので、すぐに気づいて修正できます。
VLOOKUPの代わりにXLOOKUPを使う理由は、XLOOKUPなら範囲指定が直感的で、見つからないときの挙動が標準で IFNA と相性が良いからです。XLOOKUPの第4引数で代替値を指定する方法もあります。ただし IFNAでくるむ書き方のほうが「エラー処理を分離している」ことが式から読み取りやすいですよ。
TIP
「IFERRORを使うか、IFNAを使うか」で迷ったら「数式のミスにも気づきたいか?」と自問してみてください。気づきたいなら IFNA、隠したいなら IFERROR、と考えるとシンプルです。
詳しくは IFNA関数の使い方 と VLOOKUP・XLOOKUP・INDEX/MATCH 使い分けガイド もあわせてどうぞ。
パターン4:IFS + ANDでネストレスのランク判定
「売上が100万円以上 かつ 達成率100%以上ならS」「売上が100万円以上 かつ 達成率80%以上ならA」「それ以外はB」のような複雑な分岐は、IFをネストする代わりに IFS + AND の組み合わせがすっきりします。
=IFS(
AND(B2>=1000000, C2>=1), "S",
AND(B2>=1000000, C2>=0.8), "A",
TRUE, "B"
)
ポイントは末尾の TRUE, "B" です。IFS は「すべての条件が FALSE のとき #N/A を返す」という挙動があるので、最後に必ずデフォルト値を置いておくのがコツですよ。
複数条件をフラットに並べたい場面では、IFS は本当に頼りになります。詳しい構文ルールは IFS関数の使い方 にまとまっています。
パターン5:IFを3段ネストした数式をIFSに書き直す(ビフォーアフター)
最後は、多くの人が一度はやらかす「IF 3段ネスト」のリファクタリングです。
ビフォー(IF 3段ネスト)
=IF(B2>=90, "優", IF(B2>=70, "良", IF(B2>=60, "可", "不可")))
ぱっと見、何の判定をしているのかわかりませんよね。括弧の数も多くて、条件を1つ追加するだけでも壊れる可能性があります。
アフター(IFSでフラット化)
=IFS(B2>=90, "優", B2>=70, "良", B2>=60, "可", TRUE, "不可")
行数が減るだけでなく、上から順に条件と返り値を読めます。「90点以上は優、70点以上は良、60点以上は可、それ以外は不可」と、式そのものが説明文のようになりますね。
書き換えのコツは次の3ステップです。
- ネストしている IF をすべて並べて条件と値を抜き出す
=IFS(条件1, 値1, 条件2, 値2, ...)の形に並べ直す- 最後に
TRUE, "デフォルト値"を入れて #N/A を防ぐ
「IFを3段以上ネストしているな」と思ったら、まずは IFS への書き換えを検討してみてくださいね。
よくある間違いと対処法
最後に、6関数を使い始めたときに陥りがちな落とし穴を3つ紹介します。
IFERRORで本当のエラーまで隠してしまう問題
IFERROR は便利な反面、数式ミス起因のエラーまで隠してしまう副作用があります。たとえば次の数式を見てください。
=IFERROR(VLOOKUP(A2, マスタ!A:B, 5, FALSE), "該当なし")
第3引数の列番号が 5 になっていますが、マスタの範囲は2列しかないとします。本来なら #REF! エラーが出るはずです。ところが IFERROR が「該当なし」と表示してしまうので、ミスに気づくのが遅れがちです。
対処法は次のとおりです。
- 検証中の数式では IFERROR をかけずに、エラーが出るまま残す
- 完成した数式でも、可能なら IFNA に切り替えて #N/A だけ処理する
- IFERRORを使う場合は、代替値を「マスタ未登録」など限定的な意味の文字列にしておくと、後で見たとき「ここはVLOOKUPの該当なし対応だな」と思い出しやすい
IFSの末尾TRUE漏れで#N/Aになる問題
IFS は便利ですが、すべての条件が FALSE のとき #N/A を返すという落とし穴があります。
=IFS(B2>=90, "優", B2>=70, "良", B2>=60, "可")
この式は60点未満のとき #N/A になります。IF と違って「FALSE値」がないので、デフォルト値を明示する必要があるんですよね。
対処法は末尾に TRUE, "デフォルト値" を入れることです。
=IFS(B2>=90, "優", B2>=70, "良", B2>=60, "可", TRUE, "不可")
TRUE は「上記すべての条件が FALSE だった場合」を意味するパターンマッチです。IFS のお作法として覚えておくと便利ですよ。
AND/ORを単体で使ってTRUE/FALSEだけが返るケース
「複数条件を判定したい!」と意気込んで AND だけを書いてしまうケースです。
=AND(B2>=10, C2<=1000)
これだと TRUE / FALSE しか返ってきません。表のセルに TRUE と書いてあっても「で、結局どうしろと?」となってしまいますよね。
対処法はシンプルで、必ず IF で包んで返り値を分岐させます。
=IF(AND(B2>=10, C2<=1000), "販売可", "停止")
ANDとORは「条件式を組み立てる部品」、IFは「最終的な値を返す入れ物」というイメージで使い分けてください。
スプレッドシート 条件分岐関数 使い分けまとめ
スプレッドシートの条件分岐は、6関数(IF・IFS・IFERROR・IFNA・AND・OR)で必要十分です。
「条件数 → 目的 → エラー範囲」の3段階で決める
迷ったときの判断手順は次のとおりです。
- 目的が「結果の分岐」か「エラー処理」かを決める
- 結果の分岐なら条件数(1つ or 複数)で IF か IFS かを選ぶ
- エラー処理なら対象範囲(すべて or #N/Aのみ)で IFERROR か IFNA かを選ぶ
- 複数条件は AND/OR を IF や IFS の中で部品として使う
この3段階をたどるだけで、関数選びで迷うことはほぼなくなりますよ。
個別記事への深掘り誘導
それぞれの関数の構文・引数・実務サンプルは、個別記事にもっと詳しくまとめています。
- 条件分岐の基本: スプレッドシートのIF関数の使い方
- 複数条件をフラットに: スプレッドシートのIFS関数の使い方
- 全エラー一括処理: スプレッドシートのIFERROR関数の使い方
- #N/A だけ処理: スプレッドシートのIFNA関数の使い方
- 「すべて満たす」条件: スプレッドシートのAND関数
- 「いずれか満たす」条件: スプレッドシートのOR関数
VLOOKUP との組み合わせをもっと深掘りしたい方は、 VLOOKUP・XLOOKUP・INDEX/MATCH 使い分けガイド と VLOOKUPで別シートを参照する完全ガイド もあわせてどうぞ。
「IFを書きすぎてもう何の判定をしているか自分でもわからない」状態は、IFS への書き換えで一気に整理できます。まずは手元の壊れかけ数式を1つ、IFS で書き直してみてくださいね。
