Menu

IFERROR関数の使い方: #N/Aや#DIV/0!を消す(IFNAも)

=IFERROR(B2/C2,0)はB2/C2を返し、割り算がエラーになったら0を返します。VLOOKUPと組み合わせる方法、エラーの代わりに空白を返す方法、検索ではIFNAのほうが向いている理由、すべてのエラーを隠すと本当の間違いまで隠れる理由を学びます。

このページのシートはすべて実際に動きます。数値や数式を変えると再計算されます。

=IFERROR(B2/C2,0)はB2/C2の結果を返し、その結果がエラーなら0を返します。1つ目の引数が求めたい数式で、2つ目が、その数式がエラーになったときに代わりに表示するものです。

1個あたりの価格
E2
ABCDE
1ProductRevenueUnitsPlainWith IFERROR
2Pens$12080$1.50$1.50
3Paper$30050$6.00$6.00
4Ink$900#DIV/0!$0.00
5Tape$4530$1.50$1.50
6Clips$00#DIV/0!$0.00
セルをクリックすると数式が見えます。数値や数式を変えると、シートが再計算されます。

InkとClipsは個数が0なので、D列の普通の割り算は#DIV/0!と表示されます。E列ではそれらに$0.00が表示され、ほかの行には普通の価格が表示されます。C4に15と入力すると、両方の列にInkの価格が表示されます。

IFERROR関数の構文

=IFERROR(value, value_if_error)
  • value(値)は計算する数式です。
  • value_if_error(エラーの場合の値)は、valueがエラーのときに返されます。#N/A、#VALUE!、#REF!、#DIV/0!、#NUM!、#NAME?、#NULL!、それに#CALC!のような新しいエラーも対象です。
  • valueがエラーでなければ、IFERRORはそれをそのまま返します。

置き換える値には、数値(0)、文字列("Not found")、空の文字列("")、別の数式を指定できます。たとえば別の表でもう一度検索することもできます:=IFERROR(VLOOKUP(E2,A2:C6,3,FALSE),VLOOKUP(E2,G2:I6,3,FALSE))。

VLOOKUPとIFERROR

検索値が表にないと、検索は#N/Aを返します。IFERRORで囲むと、代わりにメッセージを表示できます:

価格を検索する
F2
ABCDEF
1ProductCategoryPriceLook forPrice
2AppleFruit$1.20Pear$1.50
3PearFruit$1.50KiwiNot found
4CarrotVegetable$0.80Milk$1.10
5BreadBakery$2.40
6MilkDairy$1.10
セルをクリックすると数式が見えます。数値や数式を変えると、シートが再計算されます。

Kiwiはリストにないので、F3はNot foundと表示します。A4のCarrotをKiwiに書き換えると、F3で見つかります。XLOOKUPなら、4つ目の引数が「見つからない場合」の値なので、このためのIFERRORは要りません:=XLOOKUP(E2,A2:A6,C2:C6,"Not found")。

IFNA: #N/Aだけを受け止める

IFNAはIFERRORと同じように動きますが、置き換えるのは#N/Aだけです。検索ではたいていこちらが望ましい動きです。#N/Aは「見つからない」という普通の答えですが、それ以外のエラーは数式そのものが間違っていることを意味するからです。このシートの数式は、3列の表の4列目を求めるという打ち間違いをしています:

IFERRORは打ち間違いを隠し、IFNAは表示する
F2
ABCDEFG
1ProductCategoryPriceLook forIFERRORIFNA
2AppleFruit1.2PearNot found#REF!
3PearFruit1.5
4CarrotVegetable0.8
5BreadBakery2.4
6MilkDairy1.1
セルをクリックすると数式が見えます。数値や数式を変えると、シートが再計算されます。

Pearは表にあるのに、F2はNot foundと表示します。IFERRORが、間違った列番号による#REF!を、商品がないときと同じメッセージに変えてしまったからです。G2は#REF!をそのまま通すので、数式が壊れていることがわかります。G2の4を3に変えると、1.5が返ります。IFNAにはExcel 2013以降が必要です。

エラーの代わりに空白を返す

何も表示しないなら、置き換える値に空の文字列(ダブルクォーテーション2つ)を使います:

エラーを空白にした伸び率
D2
ABCD
1MonthLast yearThis yearGrowth
2Jan20024020%
3Feb0150
4Mar180171-5%
5Apr90
6May25030020%
セルをクリックすると数式が見えます。数値や数式を変えると、シートが再計算されます。

2月と4月は昨年の売上がないので伸び率を計算できず、セルは空のままです。ほかの月は20%、マイナス5%、20%と表示されます。""のセルには文字列が入っています。SUMとAVERAGEはそれを飛ばしますが、=D3*2は#VALUE!になります。後の数式でその列を計算に使うなら、代わりに0を返してください。

練習: 見つからないときの表示付きで検索する

在庫の検索
F2
ABCDEF
1ProductStockLook forStock
2Apple40Kiwi
3Pear25
4Carrot60
5Bread12
6Milk30
セルをクリックすると数式が見えます。数値や数式を変えると、シートが再計算されます。

やってみよう: F2で、E2の商品の在庫をA2:B6から検索し、リストにないときは「Not found」と表示してください。

すべてのエラーを隠すと間違いまで隠れる理由

IFERRORは何も直しません。セルに何を表示するかを決めるだけです。数式をIFERRORで囲む前に:

  1. エラーが起きる理由を確かめる。 Unitsの空白セルが#DIV/0!の原因なら、本当に必要なのは価格を0にすることではなく、誰かがデータを入力することかもしれません。
  2. 検索にはIFNAを使う。 そうすれば、間違った列番号(#REF!)、つづりの間違った名前(#NAME?)、数値の列に入った文字列(#VALUE!)はそのまま表示されます。
  3. 割り算では特定のケースを判定する。 =IF(C2=0,0,B2/C2)は割る数が0の場合だけを処理し、B2の参照が間違っていればそのエラーは表示されます。2つの方法は#DIV/0!のページで比べています。
  4. データと見間違えない置き換えの値を選ぶ。 価格の列の0は本物の価格に見え、平均を下げてしまいます。""や「Not found」ならその心配はありません。

数式を囲むのは最後にします。まず、正しく動くはずの行で正しい結果が出ることを確かめてください。

よくある質問

IFERRORをVLOOKUPと一緒に使うには?

検索の数式を囲みます:=IFERROR(VLOOKUP(E2,A2:C6,3,FALSE),"Not found")。E2が最初の列にないとき、セルには#N/Aの代わりにNot foundと表示されます。=IFNA(VLOOKUP(E2,A2:C6,3,FALSE),"Not found")も同じ働きをしますが、それ以外のエラーはそのまま表示します。

IFERRORで空白を返すには?

2つ目の引数に空の文字列を指定します:=IFERROR(B2/C2,"")。セルは空に見えますが文字列が入っているので、そのセルに=D2+1を使うと#VALUE!になります。SUMとAVERAGEはこのセルを飛ばします。

IFERRORとIFNAの違いは何ですか?

IFERRORはすべてのエラーを置き換えます:#N/A、#DIV/0!、#VALUE!、#REF!、#NAME?、#NUM!、#NULL!。IFNAは検索の「見つからない」を表す#N/Aだけを置き換え、それ以外のエラーは表示させるので、壊れた数式が隠れません。

Excelで#N/Aを0に置き換えるには?

数式をIFNAで囲み、値に0を指定します:=IFNA(VLOOKUP(E2,A2:C6,3,FALSE),0)。XLOOKUPには4つ目の引数として置き換えの値が組み込まれています:=XLOOKUP(E2,A2:A6,C2:C6,0)。

IFERRORとIFNAが使えるExcelのバージョンは?

IFERRORはExcel 2007から、IFNAはExcel 2013からあります。古いファイルでは=IF(ISERROR(B2/C2),0,B2/C2)を見かけることがあります。IFERRORと同じ働きですが、数式を2回計算します。

Coddyのプログラミング言語のイラスト

Coddyでコードを学ぼう

始める