=IFS(B2>=90,"A",B2>=80,"B",B2>=70,"C",TRUE,"F")は、条件を最初から順に調べ、最初にTRUEになった条件と組になっている値を返します。入れ子のIFと同じことを、IFの中にIFを入れずに行います。IFSにはExcel 2019以降かMicrosoft 365が必要です。
| A | B | C | |
|---|---|---|---|
| 1 | Student | Score | Grade |
| 2 | Ana | 94 | A |
| 3 | Ben | 81 | B |
| 4 | Chloe | 70 | C |
| 5 | Dan | 65 | F |
| 6 | Eve | 88 | B |
| 7 | Finn | 90 | A |
C2をクリックしてください。条件と結果の組が4つあり、閉じかっこは1つです。B4のChloeの点数を69に変えると、成績がFに下がります。
IFS関数の構文
=IFS(logical_test1, value_if_true1, [logical_test2, value_if_true2], ...)
- 引数は組で指定します。TRUEかFALSEになる条件と、それがTRUEのときに返す値です。
- Excelは条件を順番に調べ、最初にTRUEになった条件の値を返します。それより後の条件は調べないので、
>=の条件ではいちばん高いしきい値を先に置きます。 - 組は127個まで指定できます。
- 「それ以外」専用の引数はありません。条件が
TRUEの最後の組がその役目をします。
値のない条件があると(引数の数が奇数だと)、Excelは「この関数に対して、少なすぎる引数が入力されています。」と表示して数式を受け付けません。
既定値としてのTRUEと、何も当てはまらないときの#N/A
どの条件もTRUEにならないと、IFSは#N/Aを返します。下のC列には既定値がなく、低い2つの点数で失敗します。D列は最後にTRUE,"F"があり、それを受け止めます:
| A | B | C | D | |
|---|---|---|---|---|
| 1 | Student | Score | No default | TRUE default |
| 2 | Ana | 94 | A | A |
| 3 | Ben | 81 | B | B |
| 4 | Dan | 65 | #N/A | F |
| 5 | Eve | 88 | B | B |
| 6 | Gus | 52 | #N/A | F |
#N/A 探している値が検索範囲にありません。TRUEは常に真になる条件なので、それより前のすべての条件がFALSEだったときにだけ届きます。また最後の組にする必要があります。それより後ろは調べられないからです。既定値には何でも指定できます。空のセルにするならTRUE,""、行に印を付けるならTRUE,"Check"です。既定値を付けずに#N/Aを見えなくしたいなら、=IFNA(IFS(...),"No grade")も使えます。IFNAはIFERRORのページで説明しています。
文字列やAND、ORを使うIFS
条件は普通の論理式なので、文字列を比べたり、ANDやORを使ったりできます。ここでは配送方法が地域と注文合計で決まります:
| A | B | C | D | |
|---|---|---|---|---|
| 1 | Order | Region | Total | Delivery |
| 2 | 1001 | North | $120 | Free |
| 3 | 1002 | North | $60 | Standard |
| 4 | 1003 | South | $150 | Express |
| 5 | 1004 | East | $40 | Post |
| 6 | 1005 | north | $300 | Free |
注文1001はNorthで100以上なので、Freeになります。注文1002はNorthですが100未満なので、最初の条件を満たさず、2つ目の条件B2="North"でStandardになります。文字列の比較は大文字と小文字を区別しないので、northと書かれた1005もFreeになります。
すべての条件が同じセルを決まった値と比べるとき(B2="N"、B2="S"、B2="E")は、SWITCHなら各値を1回ずつ書くだけで済み、短くなります:=SWITCH(B2,"N","North","S","South","Other")。
練習: 配送の速さ
| A | B | C | |
|---|---|---|---|
| 1 | Order | Days | Speed |
| 2 | 1001 | 3 | |
| 3 | 1002 | 1 | |
| 4 | 1003 | 7 | |
| 5 | 1004 | 2 | |
| 6 | 1005 | 5 |
やってみよう: C2で、B2の日数が1以下なら「Express」、3以下なら「Standard」、それ以外は「Slow」を返してください。IFSを使います。数式はC6まで下にコピーされます。
IFSと入れ子のIFの違い
下の2つの数式は、どの点数にも同じ成績を返します:
=IF(B2>=90,"A",IF(B2>=80,"B",IF(B2>=70,"C","F")))
=IFS(B2>=90,"A",B2>=80,"B",B2>=70,"C",TRUE,"F")
| IFS | 入れ子のIF | |
|---|---|---|
| かっこ | 1組 | IFごとに1組 |
| 既定値 | 最後のTRUEの組 | 最後のIFのvalue_if_false |
| どの条件にも当てはまらない | TRUEを加えなければ#N/A | 最後のIFのvalue_if_false(省略していればFALSE) |
| 上限 | 127組 | 入れ子64個 |
| Excel 2016以前 | #NAME? | 使える |
ファイルを開く全員がExcel 2019以降を使っているならIFSを、古いExcelの人にファイルを渡すなら入れ子のIFを選びます。結果が2つだけなら、どちらよりも普通のIFのほうが簡単です。税率の区分や配送重量のように数値の区分が多いときは、どちらも最適な道具ではありません。IFの入れ子のページで示したように、近似一致の検索用の表を使えば、しきい値をセルに置いておけます。
よくある質問
IFSに「それ以外」の値を付けるには?
最後の条件を常に真になるTRUEにします:=IFS(B2>=90,"A",B2>=80,"B",TRUE,"F")。それより前の条件のどれにも当てはまらない値はFになります。
IFSが#N/Aを返すのはなぜですか?
どの条件もTRUEにならず、最後にTRUEの組がないからです。=IFS(B2>=90,"A",B2>=80,"B")は75点に#N/Aを返します。最後にTRUE,"F"を加えるか、数式をIFNAで囲んでください。
IFSが使えるExcelのバージョンは?
Excel 2019、Excel 2021、Excel 2024、Microsoft 365、それにExcel for the webです。Excel 2016以前ではIFSを使った数式は#NAME?と表示されるので、入れ子のIFを使ってください。GoogleスプレッドシートにもIFSがあります。
IFSは入れ子のIFより優れていますか?
読みやすく閉じかっこも1つだけですが、動きは同じで、最初にTRUEになった条件が採用されます。ファイルをExcel 2016以前で開く必要があるなら、入れ子のIFを選びます。