- ベストアンサー
エクセル VLOOKUP関数のエラー非表示について
次のような式がありますが答えが#DIV/0!になり困っています。 =IF($B28="","",($F28*2)/IF(ISNA(VLOOKUP($B28,形態!$B$5:$Z$200,7,FALSE)),"",VLOOKUP($B28,形態!$B$5:$Z$200,7,FALSE))) データ範囲のシートは分かれいます。 データ範囲の形態!B5:Z200の中に空白がある場合#DIV/0!になります。 #DIV/0!を非表示する方法を教えてください。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
=IF($B28="","",IFERROR(($F28*2)/VLOOKUP($B28,形態!$B$5:$Z$200,7,FALSE),""))
その他の回答 (4)
- Nouble
- ベストアンサー率18% (330/1783)
#DIV/0!になる との、事ですが 0、又は類するもの 其で割ったエラーでは? IF(ISNA(VLOOKUP($B28,形態!$B$5:$Z$200,7,FALSE)),"",VLOOKUP($B28,形態!$B$5:$Z$200,7,FALSE)) と、ありますが 分母の結果に …)),"",VL… ""は、無し では? 1 とか 999999999999999 とかに、変えてみては? あと、 ISNAでは 引用結果が 0かは、解りません よ #NAだけを見る のではなく 他条件も見ないと ね
- bunjii
- ベストアンサー率43% (3589/8249)
>#DIV/0!を非表示する方法を教えてください。 ご提示の数式で ($F28*2)/IF(論理式,"",正のとき) で論理式の戻り値が文字列のときもエラーが出ると思います。 #DIV/0エラーは除数(分母)が0のときに起るものですから ($F28*2) を必要とする数式の書き方に誤りがあるでしょう。 =IF($B28="","",IF(ISNA(VLOOKUP($B28,形態!$B$5:$Z$200,7,FALSE)),"",($F28*2)/VLOOKUP($B28,形態!$B$5:$Z$200,7,FALSE))) Excel 2007以降のバージョンではIFERROR関数が使えますので回答No.2の数式で良いでしょう。 更にIF関数も省略して下記の数式で対応できます。 =IFERROR(($F28*2)/VLOOKUP($B28,形態!$B$5:$Z$200,7,FALSE),"")
- kagakusuki
- ベストアンサー率51% (2610/5101)
まず、B28が空欄の場合でもVLOOKUP関数の結果がエラーとはならない場合もありますから、B28セルが空欄の場合にはVLOOKUP関数による処理へ進まない様にする必要があります。(それは質問者様の関数でも「IF($B28="","",」の部分で行われる様になっています) 又、F28セルの値が数値ではない場合(空欄の場合や文字列データが入力されていた場合等)にも「($F28*2)」に対して割り算を行う処理をしない様にされた方が良いと思います。 そして、「VLOOKUP($B28,形態!$B$5:$Z$200,7,FALSE)」の結果がエラーである場合や、0が返される場合、そして文字列データが返される場合には、その結果を分数の分母に使う事は出来ないのですから、その様な場合には「($F28*2)」に対して割り算を行う処理をしない様にする必要があります。 これらの点を考慮しますと、次の様な関数とされた方が良いと思います。 =IF(AND($B28<>"",ISNUMBER($F28)),IFERROR($F28*2/VLOOKUP($B28,形態!$B$5:$Z$200,7,FALSE),""),"") 上記の関数では、 $B28<>"" という部分で、B28セルが空欄ではないかどうか事を確認し、 ISNUMBER($F28) という部分で、F28セルに数値データが入力されているかどうかという事を確認し、これら2つの判定式をANDで囲む事により、この2つの条件がどちらも満たされている場合にのみ次の処理へと進む様になっています。 そして、 /VLOOKUP($B28,形態!$B$5:$Z$200,7,FALSE) という「VLOOKUPの結果を分母とする分数が含まれている計算」を行っている箇所を、IFERROR関数で囲む事により、「VLOOKUP($B28,形態!$B$5:$Z$200,7,FALSE)」の結果がエラーである場合や、0が返される場合、そして文字列データが返される場合には、「VLOOKUPの結果を分母とする分数が含まれている計算」を行わない様にしています。 尚、F28セルに数値データが入力されているかどうかという事を確認しないまま、 IFERROR($F28*2/VLOOKUP($B28,形態!$B$5:$Z$200,7,FALSE),"") という処理を行う様にしてしまうと、F28セルが空欄の場合にも計算が行われる様になってしまいますので、 ISNUMBER($F28) 等でF28セルが空欄ではない事を確認する判定式は外せません。 只、F28セルの値が文字列データやエラーだった場合には、その後のIFERROR関数の所で割り算を行わない様に出来ますから、 ISNUMBER($F28) としなくても、F28セルが空欄ではない事を確出来さえすれば良いと考える事も出来ます。 ですから、例えば次の様な関数とする事も出来ます。 =IF(OR($B28="",$F28=""),"",IFERROR($F28*2/VLOOKUP($B28,形態!$B$5:$Z$200,7,FALSE),""))
IFの返り値は レイ か -1 だと思う。 割り算の分母に条件式は無いかな。