概要
「ユーザーが変な値を入れても、#N/A だの #VALUE! だの見せたくない」
「不正な入力があっても、表は“破綻させずに”、わかりやすい表示にしたい」
そんなときに使えるのが IFERROR 関数による“不正入力の抑止” です。
IFERROR は
「この式の結果がエラーなら、代わりにこっちを返してね」
と、エラーを“つかまえて別の値に差し替える” ための関数です。
ここでは、
不正入力が原因のエラーを、
IFERROR でどう扱うかを、初心者向けに丁寧に解説します。
IFERROR の基本
書式と考え方
書式はとてもシンプルです。
=IFERROR(計算式, エラーのときに返す値)
動きは一行で説明できます。
- 計算式の結果が正常 → そのまま返す
- 計算式の結果がエラー → 「エラーのときに返す値」を返す
IFERROR がつかまえるエラーは、#DIV/0!, #N/A, #VALUE!, #REF!, #NUM!, #NAME? など、ほぼすべて。
つまり、
「不正入力 → エラー → IFERROR で“安全な値・メッセージ”に変換」
という流れを作ることで、
ユーザーの入力ミスがあっても表全体を壊さずに済みます。
不正な割り算入力を抑止する(0 や空白のとき)
分母が 0 のときは 0 や空白にする
C2 ÷ D2 で割合を出している列を考えます。
通常の式はこうです。
=C2/D2
ここで D2 に 0 や空白が入ると #DIV/0! エラーになります。
原因は「分母に不正な値が入っている」=不正入力。
このとき IFERROR を使うと、
エラーを 0 や空白に“差し替え”できます。
例:エラーなら 0 にする
=IFERROR(C2/D2, 0)
例:エラーなら空白にする
=IFERROR(C2/D2, "")
これで、分母に 0 や空白が入っても、
見た目が崩れることなく、“不正入力の悪影響”を抑えることができます。
不正な検索値を抑止する(VLOOKUP / XLOOKUP)
存在しないコードを入れられても崩さない
A2 に「商品コード」、
D2:E100 に「商品マスタ」があるとします。
通常の VLOOKUP はこうです。
=VLOOKUP(A2, $D$2:$E$100, 2, FALSE)
A2 に存在しないコードが入ると #N/A になります。
これは「ユーザーの入力したコードが不正」という状態。
IFERROR をかぶせて、
「不正なコードなら“未登録”と表示する」ようにできます。
=IFERROR(
VLOOKUP(A2, $D$2:$E$100, 2, FALSE),
"未登録"
)
動き:
- 正しいコード → 商品名を返す
- マスタにないコード → 「未登録」と表示
これで、ユーザーが間違ったコードを入れても、
表に謎の #N/A が並ぶのではなく、
「未登録」とはっきり分かるようになります。
不正な数値入力を抑止する(文字が混ざったとき)
数値列に文字列が混ざっても、エラーにしない
A2 に「数量」が入っている列を考えます。
本来は数値だけのはずですが、ユーザーが「10個」などと文字を混ぜて入力してしまうかもしれません。
たとえば、B2 で「数量 × 100 円」の計算をしたいとします。
普通に書くと:
=A2*100
ここで A2 が「10個」などの文字列だと #VALUE! エラーになります。
これも不正入力です。
IFERROR で、
「不正入力なら 0」とすることができます。
=IFERROR(A2*100, 0)
こうしておくと、
- 正しい数値 → 正常に計算
- 不正な文字列 → 0(=売上なしなどとして扱う)
というふるまいになります。
不正入力を「目で分かるメッセージ」に変える
エラーのまま見せるのではなく、意味のある文言にする
IFERROR の第 2 引数は数値だけでなく、文字列も指定できます。
たとえば、「不正な入力です」と明示したい場合。
=IFERROR(何らかの計算式, "不正な入力です")
例:商品コード検索の結果がエラーのとき
=IFERROR(
VLOOKUP(A2, $D$2:$E$100, 2, FALSE),
"不正なコード"
)
例:数量×単価の計算で入力ミスがあったとき
=IFERROR(
A2*B2,
"数量か単価が不正"
)
これで、ユーザーは
「なぜ結果が出ていないのか」「どこが不正なのか」を、
エラー記号ではなく、ちゃんとした日本語で気づけます。
IFERROR を使うときの注意点
1. 「すべてのエラーを同じ扱い」にしてしまう危険もある
IFERROR は、どんなエラーでもまとめて処理します。
- 本当に想定している不正入力
- 数式ミスや参照範囲ミスといった“本当は気づきたいエラー”
これらをまとめて「0 にする」「空白にする」
といった使い方をすると、エラーに気づけなくなる ことがあります。
対策として、
- まずは ISNA / ISERROR で「想定エラーだけ」を IF で処理する
- どうしても IFERROR を使う場合は、
第 2 引数に「不正入力」など、気づけるメッセージを書く
など、「見えなくしすぎない」工夫が大事です。
2. 入力チェック用の列を別に作るのもおすすめ
IFERROR で見た目をきれいにするだけでなく、
別列で「入力が不正かどうか」をフラグにするのもよくある手です。
例:
=IFERROR(A2*B2, 0) ' 表示用(エラーは 0)
=IF(ISERROR(A2*B2), "不正入力", "") ' チェック用フラグ
見た目は崩さずに、
どこで不正入力が起きているかは別途把握できます。
例題
問題1
C2 ÷ D2 で割合を計算したいが、
D2 が 0 や空白で #DIV/0! になる場合は、代わりに 0 を返したい。
このときの式を書いてください。
=IFERROR(C2/D2, 0)
問題2
A2 の商品コードを D2:E100 から VLOOKUP で検索し、
見つからない(#N/A)などのエラーになった場合は「未登録」と表示したい。
そのための式を書いてください。
=IFERROR(VLOOKUP(A2, $D$2:$E$100, 2, FALSE), "未登録")
問題3
A2 に数量、B2 に単価が入っており、
A2*B2 がエラーになる(文字混入など)場合は 0 を返したい。
C2 に書く式を書いてください。
=IFERROR(A2*B2, 0)
問題4
A2 に入力された値を 1.1 倍したいが、
A2 が不正な入力で計算エラーになった場合は「不正な入力」と表示したい。
そのための式を書いてください。
=IFERROR(A2*1.1, "不正な入力")
問題5
A2:A20 にいろいろな計算式が入っています。
B2 に =IFERROR(A2, 0) と入れて下までコピーしたとき、
A列がエラーの行では B列に何が表示されますか。
また、このような使い方の目的は何ですか(簡単に説明してください)。
(模範的な答え)
- A列がエラーの行では、B列には 0 が表示される。
- 目的は「エラーをそのまま表示せず、0 として扱うことで、見た目や集計を崩さないようにすること」。
まとめ
「不正入力の抑止 → IFERROR」のポイントは、
- ユーザーの“変な入力”が原因のエラーを、
見た目も意味も分かりやすい値に差し替えること =IFERROR(計算式, エラー時の値)という形で、
表を“壊さない安全弁”として働かせること- ただし「全部黙らせる」のではなく、
メッセージ表示や別列フラグで“気づける余地”を残すこと
にあります。
IFERROR は、
「エラーを隠す」というより
「ユーザーにとって意味のある形に変換する」ために使う、
と意識してもらえると、ぐっと上手に使えるようになります。
