edubun
日本語

AND、OR、IFの入れ子

点数81、出席率70%なら、点数の判定には合格し、出席の判定には不合格です。ANDは両方を、ORは一つだけを必要とします。

背景作り話の例です。ある先生が、成績の締め切り前夜に成績表を作ります。決まりは、90以上がA、80以上がB、70以上がC、60以上がD、それ未満がFです。先生は思いついた順、つまり低い方から判定を書きます。=IF(B2>=60, "D", IF(B2>=70, "C", ...))。すると60以上の生徒は全員D。93点の生徒もDです。エラーは何も出ません。翌朝、生徒の一人がそれを指摘します。直し方は順序を逆にすることで、その理由は下で考えます。

二つの条件を同時に:ANDとOR

同じ先生には二つ目の決まりがあります。合格するには、点数が60以上で、しかも出席率が80%以上でなければなりません。ANDは一つ以上の判定(Excelでは255個まで)をとり、すべてがTRUEのときだけTRUEを返します。=AND(B2>=60,C2>=80)。ORは少なくとも一つがTRUEならTRUEを返すので、=OR(B2>=90,C2=100)は、とても高い点を取ったか一度も欠席しなかった生徒を表彰候補として印をつけられます。NOTはTRUEとFALSEを入れ替えます。「〜でない限り」と表す決まりに向いています。

ANDとORだけではTRUEかFALSEしか返しません。IFの中に入れて言葉に変えましょう。=IF(AND(B2>=60, C2>=80), "Yes", "No")。中の判定は、別の列を指しても、文字列を比べても、計算を使ってもかまいません。ANDとORは範囲の中の文字列と空のセルを飛ばし、判定できるものが一つもなければ#VALUE!を返します。下の表は、点数60以上と出席80以上の二つの判定を、4人の生徒について行ったものです。

書く前に、決まりをふつうの言葉で言ってみましょう。「点数が60以上で、かつ出席が80以上なら合格」はそのままANDに、「どちらかの判定に合格すれば合格」はORに対応します。「60以上で、さらに出席80%か医師の診断書のどちらか」のように二つが混ざった決まりには、関数の中に関数が必要です。=AND(B2>=60, OR(C2>=80, D2="note"))。内側から先に書きます。思ったところでTRUEとFALSEになるか確かめてから、外側で包みましょう。

点数出席率(%)ANDOR
9395TRUETRUE
8170FALSETRUE
6688TRUETRUE
5570FALSEFALSE

物語の93点がDになった理由

IFの結果は二通りです。もっと必要なら、FALSEの答えの場所に別のIFを入れます。成績の段階は=IF(B2>=90, "A", IF(B2>=80, "B", IF(B2>=70, "C", IF(B2>=60, "D", "F"))))になります。表計算は最初の判定を試し、それが成り立たないときだけ次へ進みます。物語でうまくいかなかったのはまさにここです。B2>=60が最初にあると、93点は最初の判定で合格してDで止まります。上の判定は読まれもしません。いちばん高い基準から始めて、下へ進みましょう。

かっこを数えましょう。四つのIFには、最後に四つの閉じかっこが必要です。Excelの仕様と制限のページでは関数の入れ子は64レベルまで認められていますが、3〜4レベルを超えると数式は読みにくく、こわれやすくなります。どちらのソフトも新しい版にはIFSがあり、入れ子にせず判定と答えの組を順に並べられます。GoogleのIFのヘルプからもリンクされています。長い段階には、次の単元の検索用の表がたいていさらにわかりやすい方法です。基準がセルに置かれ、だれでも見て変えられるからです。

下の実験室では、成績の列は四つの入れ子のIFを、合否の列はANDを使ったIFを使います。両方を下方向へコピーして、BenとDevを比べましょう。Benは点数が上ですが出席で不合格になります。Devは出席していますが点数が60未満です。

境目を試しましょう。成績の段階なら、数式を信じる前にちょうど90、89.9、60、59.9を試します。まちがいの多くは、>と>=で答えが変わる境目に隠れています。
読み込み中

ドラッグで回転、スクロールまたはピンチで拡大・縮小。

D2に成績の数式を書いて下方向へコピーしましょう。60の判定を最初に置いてみると、AnaがDに下がるのがわかります。
よくある間違い
  • 入れ子のIFを最も低い基準から始める。 最初にTRUEになった判定が勝ちます。B2>=60が最初にあると、60以上の点数はすべてDで止まります。
  • =IF(B2>=60 AND C2>=80, ...)と書く。 ANDは判定を引数にとる関数で、判定の間に置く言葉ではありません。AND(B2>=60, C2>=80)と書きます。
  • 決まりが「両方」なのにORを使う。 点数81、出席率70%の生徒は、ORなら合格、ANDなら不合格です。決まりを声に出して言いましょう。文の中に「かつ」があればANDです。
  • 閉じかっこの数がわからなくなる。 四つの入れ子のIFには、最後に四つの)が必要です。一つ足りないと、数式は受け付けられません。
先生からひとこと入れ子のIFは、学習者がひと目で読めない最初の数式であることが多いものです。黒板で段階を追って組み立てましょう。まずAか「Aでない」かの一つのIF、次に「Aでない」を二つ目のIFに置き換える、というように、一段階ごとに試します。下方向へコピーする前に、93、85、60、59.9の成績を予想させましょう。順序をまちがえた物語は話す価値があります。エラーなしに失敗し、直し方は一度見ればはっきりわかるからです。
  1. B2は81、C2は70です。=AND(B2>=60,C2>=80)は何を返しますか?
    • FALSE
    • TRUE
  2. 同じセルです。=OR(B2>=60,C2>=80)は何を返しますか?
    • TRUE
    • FALSE
  3. =NOT(5>3)は何を返しますか?
    • FALSE
    • TRUE
  4. B2は93です。=IF(B2>=90, "A", IF(B2>=80, "B", "C"))は何を返しますか?
  5. B2は85です。同じ数式は何を返しますか?
  6. B2は93です。順序をまちがえた=IF(B2>=60, "D", IF(B2>=90, "A", "F"))は何を返しますか?
  7. 四つの入れ子のIFだけでできた数式は、最後にいくつの閉じかっこで終わりますか?
  8. Excelでは関数の入れ子は何レベルまで認められていますか?
  9. B2は66、C2は88です。=IF(AND(B2>=60, C2>=80), "Yes", "No")は何を返しますか?
  10. 「60以上なら合格」の数式を試すのに最もよい点数はどれですか?
    • 60と59.9
    • 100と0
    • 75と76
    • 30と90
ポイント
  • AND:すべての判定がTRUE。OR:少なくとも一つがTRUE。NOT:その逆。
  • IFの中で使えば、TRUEやFALSEを言葉に変えられる。
  • 入れ子のIF:次のIFはFALSEの場所に置き、いちばん高い基準から。
  • 境目を試す。長い段階には検索用の表のほうがわかりやすい。
このコースの出典 (19)
  • Microsoft Support, "Switch between relative, absolute, and mixed references" (support.microsoft.com/en-us/office/dfec08cd-ae65-4f56-839e-5f0d8d0baca9: $ before column and row, F4 to switch, copying two down and two right: $A$1 stays, A$1 to C$1, $A1 to $A3, A1 to C3)
  • Microsoft Support, "AVERAGE function" (support.microsoft.com/en-us/office/047bac88-d466-426c-a32b-8f33eb960cf6: text, logical values and empty cells in a reference ignored, zeros included; 10, 7, 9, 27, 2 gives 11, with 5 gives 10; mean 5, median 4, mode 3 for 2 3 3 5 7 10)
  • Microsoft Support, "COUNT function" (support.microsoft.com/en-us/office/a59cd7fc-b623-4d93-87a4-d23bf411294c: only numbers counted, dates count, errors and text do not)
  • Microsoft Support, "ROUND function" (support.microsoft.com/en-us/office/c018c5d8-40fb-4053-90b1-b3e7f61a213c: num_digits required; 2.15 to 2.2, -1.475 to -1.48, 626.3 to 1000, 1.98 to 0, -50.55 to -100)
  • Microsoft Support, "IF function" (support.microsoft.com/en-us/office/69aed7c9-4e8a-4755-a9bc-aa8bbff73be2: value_if_false optional, text in quotes except TRUE and FALSE, 0 and #NAME? problems)
  • Microsoft Support, "VLOOKUP function" (support.microsoft.com/en-us/office/0bbc8083-26fe-4963-8ab8-93a18ad188a1: range_lookup TRUE by default, sorted first column, #N/A, #REF!, #VALUE!, absolute table range, wildcards with FALSE)
  • Microsoft Support, "XLOOKUP function" (support.microsoft.com/en-us/office/b7fd680e-6d10-43e6-84f9-88eae8bf5929: not in Excel 2016 and Excel 2019, exact match by default)
  • Microsoft Support, "How to correct a #VALUE! error" (support.microsoft.com/en-us/office/15e1b616-fbf2-4147-9c0b-0a11a20e409e: + and * may not calculate cells with text, use SUM instead, IFERROR hides all errors)
  • Microsoft Support, "Excel specifications and limits" (15 digits, 64 nested levels, 255 arguments)
  • Google Docs Editors Help, "VLOOKUP" (support.google.com/docs/answer/3093318: is_sorted TRUE by default, FALSE recommended, search down to a larger value, " Apple" and "Apple " differ, wildcards, IFNA, absolute range)
  • Google Docs Editors Help, "XLOOKUP" (support.google.com/docs/answer/12405947)
  • Google Docs Editors Help, "ROUND" (support.google.com/docs/answer/3093440: places optional, 0 by default, rounding by magnitude)
  • Google Docs Editors Help, "IF" (support.google.com/docs/answer/3093364: order of the answers is the most common problem, IFS)
  • Google Docs Editors Help, "AVERAGE" (support.google.com/docs/answer/3093615: text ignored, any number of arguments)
  • Google Docs Editors Help, "COUNTA" (support.google.com/docs/answer/3093991: zero-length strings and spaces count)
  • Google Docs Editors Help, "Keyboard shortcuts for Google Sheets" (support.google.com/docs/answer/181110: F4 and Fn+F4 while entering a formula, F4 as Redo)
  • Pryor Learning and Exceljet (F4 cycle A1, $A$1, A$1, $A1; = comparison not case-sensitive)
  • Ablebits (IF without value_if_false returns FALSE)
  • Spreadsheet Class (Sheets circular dependency shows #REF!)

確認日: 2026-10-19