IFERROR関数の練習問題(全5問)
色のついたセルに数式を入力して Enter。選択枠の右下の四角をドラッグすると、下や右へまとめて入力できます。
0で割ったところを「-」にする
D3 に客単価(売上 ÷ 客数)を求めてください。客数が 0 でエラーになるときは「-」と表示します。
ヒント 1
まず普通に「=B3/C3」と書くと #DIV/0! になります。それを IFERROR で包みます。
ヒント 2
「=IFERROR(B3/C3,"-")」のように、2つめに表示したい文字を " で囲んで書きます。
解説を見る
客数が 0 のあいだは #DIV/0! になるため「-」が表示されます。客数を入れると、IFERROR は何もせず割り算の結果をそのまま返します。IFERROR は普段は何もせず、エラーのときだけ働く関数です。
模範解答: =IFERROR(B3/C3,"-")
見つからないときに「該当なし」と出す
B7 に、B6 のコードに対応する商品名を取り出してください。表に無いコードのときは「該当なし」と表示します。
ヒント 1
まず「=VLOOKUP(B6,A2:C4,2,FALSE)」だけ書くと #N/A になることを確かめてください。
ヒント 2
その式をまるごと IFERROR の1つめに入れ、2つめに "該当なし" と書きます。
解説を見る
P999 は表に無いので VLOOKUP は #N/A を返します。IFERROR がそれを受け取って「該当なし」に差し替えました。登録が無いだけの場面では、エラー表示のまま残す理由がありません。
模範解答: =IFERROR(VLOOKUP(B6,A2:C4,2,FALSE),"該当なし")
エラーのときは空欄にする
D3 に達成率(実績 ÷ 目標)を求めてください。目標が未入力でエラーになるときは、何も表示しないようにします。
ヒント 1
何も表示しないときは、" を2つ続けて "" と書きます。
ヒント 2
「=IFERROR(C3/B3,"")」の形です。
解説を見る
"" は「長さ 0 の文字」で、画面上は空欄に見えます。ただしセルが空になったわけではありません。COUNTBLANK は空欄として数えますが、COUNTA も「値がある」として数えるため、両方に数えられます。件数を数える表では気をつけてください。
模範解答: =IFERROR(C3/B3,"")
3行まとめて単価を出す
D2 に単価(売上 ÷ 個数)を書いてから、右下の四角を D4 までドラッグしてください。個数が 0 の行は「-」になるようにします。
ヒント 1
D2 に「=IFERROR(B2/C2,"-")」と入力します。
ヒント 2
D2 を選び、右下の小さな四角を D4 まで下へドラッグします。参照が1行ずつ下へずれます。
解説を見る
コピーされた式を確かめると、B2/C2 が B3/C3、B4/C4 と1行ずつずれています。エラーになるのは個数が 0 の行だけで、他の行はそのまま計算されます。1つの式で「普通の行」と「まだ計算できない行」の両方を扱えるのが IFERROR の便利なところです。
模範解答: D2 =IFERROR(B2/C2,"-") / D3 =IFERROR(B3/C3,"-") / D4 =IFERROR(B4/C4,"-")
合計に使えるように数値で返す
B7 に、B6 のコードに対応する単価を取り出してください。表に無いときは、あとで合計に使えるように数値の 0 を返します。
ヒント 1
単価は範囲 A2:C4 の3列目です。
ヒント 2
2つめの引数は 0 と書きます。"0" のように " で囲むと文字の 0 になり、合計に入りません。
解説を見る
0 を引用符なしで書いたので、数値の 0 が返っています。"0" と囲むと見た目は同じでも文字として扱われ、SUM で合計しても足されません。そのセルを後で計算に使うかどうかで、文字と数値のどちらを返すか決めてください。
模範解答: =IFERROR(VLOOKUP(B6,A2:C4,3,FALSE),0)
IFERROR関数は、式の結果がエラーになったときだけ、指定した別の値に置き換えて表示する関数です。
- 書き方
=IFERROR(式, エラーのときに表示する値)- 例
=IFERROR(B3/C3,"-")
IFERROR関数とは
IFERROR(イフエラー)関数は、式がエラーになったときだけ、別の値に差し替える関数です。
表を作っていると、式そのものは正しいのにエラーが出ることがあります。まだ数量を入力していない行の #DIV/0!、名簿に無いコードを探したときの #N/A。どちらも「壊れている」わけではなく、計算する材料がまだ揃っていないだけです。
そういう場所を - や「該当なし」に置き換えて、表を読みやすく保つのが IFERROR の役割です。
2つの引数
=IFERROR(式, エラーのときに表示する値)
| 位置 | 意味 |
|---|---|
| 1つめ | 本来やりたい計算。ここがエラーになるかどうかを見る |
| 2つめ | エラーだったときに代わりに表示する値 |
エラーでなければ、1つめの結果がそのまま表示されます。普段は何もしない関数だと考えると分かりやすいです。
#DIV/0! を「-」に置き換える
売上を客数で割って客単価を出す表を考えます。客数がまだ 0 の行は #DIV/0! になります。
=B3/C3 → #DIV/0!
=IFERROR(B3/C3,"-") → -
文字を表示したいときは " で囲みます。囲み忘れると #NAME? になるので注意してください。これは エラー値の意味と直し方 で扱った、Excel が知らない言葉を名前だと解釈してしまう現象です。
#N/A を「該当なし」に置き換える
VLOOKUP で探した値が見つからないと #N/A になります。
=IFERROR(VLOOKUP(B6,A2:C4,2,FALSE),"該当なし")
登録されていないコードを入力しただけ、という場面ではエラーのままにしておく理由がありません。IFERROR が最もよく使われるのはこの組み合わせです。
VLOOKUP そのものの書き方は VLOOKUP関数の使い方 を参照してください。
空欄にしたいときは ""
" を2つ続けて書くと、何も表示しないという意味になります。
=IFERROR(C3/B3,"")
- すら出したくない、まだ入力していない行は真っ白にしておきたい、というときに使います。
ただし、これは見た目が空欄になるだけで、セルは空ではありません。紛らわしいのは、COUNTBLANK が空欄として数える一方で、COUNTA も「値がある」として数えることです。両方に数えられるため、「空欄の数」と「入力済みの数」を足すと行数を超えます。本当に空のセルは COUNTBLANK にしか数えられないので、ここが食い違ったときは "" を疑ってください。
つまずきポイント: 隠していいエラーと、隠すと危ないエラー
ここが IFERROR で一番大事なところです。
IFERROR は、エラーの種類を区別しません。 どんなエラーでもまとめて2つめの値に置き換えます。便利に見えますが、これは式の間違いまで隠してしまうということです。
| エラー | 何が起きているか | 隠していいか |
|---|---|---|
#DIV/0! |
分母がまだ 0 | 多くの場合よい。入力待ちの状態 |
#N/A |
探したが表に無かった | 多くの場合よい。登録が無いだけ |
#REF! |
参照先が消えた | 危ない。式が壊れている |
#NAME? |
関数名や文字の書き方を間違えた | 危ない。打ち間違い |
#VALUE! |
数値の列に文字が混ざっている | 危ない。データ側の問題 |
たとえば VLOOKUP を IFERROR で包むと、列番号を間違えた #REF! まで「該当なし」と表示されます。本当はコードが登録されているのに、式の間違いで見つからないだけ。それが「該当なし」という、いかにも正常そうな顔で表に並びます。
「エラーが消えた」と「正しくなった」は違います。 IFERROR はエラーを消す関数であって、直す関数ではありません。
安全な使い方は、先に原因を確かめてから包むことです。エラーが出たらまず エラー値の意味と直し方 の手順で原因を特定し、「これは想定内だ」と判断できたものだけを IFERROR で包みます。
なお、#N/A だけを置き換える IFNA という関数もあります。VLOOKUP と組み合わせるなら、#REF! や #VALUE! を隠さずに残せるぶん、IFNA のほうが安全です。比較的新しい Excel で使えます。
包む場所を間違えない
エラーが混ざった列を合計すると、合計欄にもエラーが伝わります。このとき、合計の式を IFERROR で包んではいけません。
=IFERROR(SUM(D2:D4),0) ← 合計が丸ごと 0 になる
SUM はエラーを含む範囲を受け取ると、その時点でエラーを返します。それを IFERROR が受け取るので、正常な行の分まで消えて 0 になります。
正しいのは、エラーが出ている行のほうを包むことです。
D3: =IFERROR(B3/C3,0) ← エラーの行だけ 0 にする
D5: =SUM(D2:D4) ← 合計は普通に書ける
エラーは参照している先へ伝わっていくので、上流で止めるのが原則です。合計欄で困ったときほど、原因の行に戻ってください。
文字で返すか、数値で返すか
2つめの引数に何を書くかは、そのセルを後で計算に使うかで決めます。
| 書き方 | 表示 | 合計に使えるか |
|---|---|---|
=IFERROR(式,"-") |
- |
文字なので合計に入らない |
=IFERROR(式,0) |
0 |
数値なので合計に入る |
=IFERROR(式,"") |
空欄 | 文字なので合計に入らない |
"0" のように引用符で囲むと文字の 0 になり、見た目は同じでも合計に入りません。数値として返したいときは 0 と引用符なしで書きます。
IFERROR が効かないもの
すべての困りごとに効くわけではありません。
| 表示 | IFERROR で消せるか |
|---|---|
##### |
消せない。エラーではなく列幅が足りないだけ。列を広げる |
| 循環参照の警告 | 消せない。式が自分自身を参照している。式を直す |
0 や空欄 |
対象外。エラーではないので、そのまま表示される |
古い書き方との違い
IFERROR が無かった頃は、次のように書いていました。
=IF(ISERROR(B3/C3),"-",B3/C3)
同じ計算を2回書く必要があり、式が長くなるうえ、片方だけ直して食い違う事故が起きます。IFERROR ならこう書けます。
=IFERROR(B3/C3,"-")
古い資料やネット上の例では前者の書き方も見かけますが、いま新しく書くなら IFERROR で構いません。
関連する関数
| 関数 | 用途 |
|---|---|
IFNA |
#N/A だけを置き換える。VLOOKUP と組み合わせるならこちらが安全 |
IF |
条件によって表示を変える。エラー以外の分岐に使う |
VLOOKUP |
表から値を探す。#N/A の発生源になりやすい |
COUNTBLANK |
空欄を数える。"" で空欄に見せたセルも数える(COUNTA にも数えられる) |
次に進むには
IFERROR は「エラーを見せない」ための関数でした。次は条件によって表示そのものを変える書き方に進むと、表の見せ方をより細かく作り込めるようになります。エラーかどうかではなく、値の大小や一致で分けるのが IF関数 です。