こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

ISERROR関数を使用してもエラーが出る

Excel2016でセルにUSDまたは、JPYの文字がある場合はエラーが出ないのですが、それ以外の文字の場合ISERROR関数を使用しても#VALUE!というエラーが出ます。
関数は以下の通りです。

=IF(OR(NOT(ISNUMBER($G5)),NOT(ISNUMBER($K5))),"",IF($B$5<ROUNDDOWN($I5*IF(NOT(ISERROR(SEARCH("JPY",$D5,1))),100,VLOOKUP(CONCATENATE(MID($D5,IF(OR(SEARCH("USD",$D5,1)=4,ISERROR(SEARCH("USD",$D5,1))),1,4),3),"JPY"),$A$12:$B$18,2,FALSE))*$G5*$B$8/IF($B$8=100000,10000,IF($B$8=10000,1000,IF($B$8=1000,100,))),0),"超過",ROUNDDOWN(IF(ISNUMBER($P5),-$P5,-$I5)*IF(NOT(ISERROR(SEARCH("JPY",$D5,1))),100,VLOOKUP(CONCATENATE(MID($D5,IF(OR(SEARCH("USD",$D5,1)=4,ISERROR(SEARCH("USD",$D5,1))),1,4),3),"JPY"),$A$12:$B$18,2,FALSE))*$G5*$B$8/IF($B$8=100000,10000,IF($B$8=10000,1000,IF($B$8=1000,100,))),0)))

エラーが出ているのは以下の「【】」の部分のようです。
=IF(OR(NOT(ISNUMBER($G5)),NOT(ISNUMBER($K5))),"",IF($B$5<ROUNDDOWN($I5*IF(【NOT(ISERROR(SEARCH("JPY",$D5,1)))】~

数値を表示したいのですが解決方法を教えてください。

回答よろしくお願いします。

投稿日時 - 2016-02-27 12:56:01

QNo.9134604

困ってます

質問者が選んだベストアンサー

 回答No.3です。

>B8はリストになっており数値しか入力できないようになっています。

との事ですが、数値データの中にも1や99999999などと言った「1000,10000,100000以外の値」も存在します。
 とは言えおそらく質問者様が仰りたい事は「B8セルには1000,10000,100000の3つの内の何れか1つの値しか入力される事は無い」という事なのではないかと推測致します。
 その場合は、

$B$8/IF($B$8=100000,10000,IF($B$8=10000,1000,IF($B$8=1000,100,)))

の部分の計算結果は必ず10になるのですから、

$B$8/IF($B$8=100000,10000,IF($B$8=10000,1000,IF($B$8=1000,100,)))

の部分を単に数値の

10

に差し替えてしまっても問題は無いという事になりますので、御質問の件の関数を次の様に修正されると宜しいかと思います。

=IF(COUNT($B$5,$B$8,$G5,$I5,$K5)=5,IF($B$5<ROUNDDOWN($I5*IFERROR(VLOOKUP(MID($D5,IF(ISERROR(1/(SEARCH("USD",$D5)<>4)),1,4),3)&"JPY",$A$12:$B$18,2,FALSE),100)*$G5*$B$8/10,0),"超過",ROUNDDOWN(IF(ISNUMBER($P5),-$P5,-$I5)*IFERROR(VLOOKUP(MID($D5,IF(ISERROR(1/(SEARCH("USD",$D5)<>4)),1,4),3)&"JPY",$A$12:$B$18,2,FALSE),100)*$G5*$B$8/10,0)),"")

投稿日時 - 2016-02-27 23:27:10

お礼

再度、回答をいただきありがとうございます。

B8はおっしゃる通り、1000,10000,100000のいずれかです。
自分が最初に作ったB8に関する関数は長く、単に「$B$8/10」とした方がいいですね。

関数の回答をいただきありがとうございました。

投稿日時 - 2016-02-28 23:16:11

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.3

> エラーが出ているのは以下の「【】」の部分のようです。
> =IF(OR(NOT(ISNUMBER($G5)),NOT(ISNUMBER($K5))),"",IF($B$5<ROUNDDOWN($I5*IF(【NOT(ISERROR(SEARCH("JPY",$D5,1)))】~

 その部分はISERROR関数なのですから、エラーとなる事はあり得ません。
 エラーとなる恐れがあるのは、それとは「別の所にあるSEARCH関数の部分」や「VLOOKUP関数の結果を使って掛け算を行っている点」などです。
 又、御質問文に書かれている関数には、SEARCH関数以外にもエラーとなる恐れがある部分が幾つもあります。
 例えば、

ROUNDDOWN($I5*

という具合に、I5セルの値に掛け算をする様になっている箇所がありますが、もしI5セルに数値ではなく文字列データが入力されていた場合には、文字列は計算の対象とする事は出来ませんから、ここで#VALUE!エラーとなってしまいます。

 又、御質問文に書かれている関数の中に

$B$8/IF($B$8=100000,10000,IF($B$8=10000,1000,IF($B$8=1000,100,)))

という箇所がありますが、その最後のIF関数である

IF($B$8=1000,100,)

の中の[偽の場合]の所が何も指定されておりませんが、それは何故なのでしょうか?
 このままでは、B8セルに1000,10000,100000以外の値が入力されていた場合や何も入力されていない場合には、

IF($B$8=100000,10000,IF($B$8=10000,1000,IF($B$8=1000,100,)))

の部分の計算結果がFALSEとなり、ExcelではFALSEは数値の0として扱われますから、

$B$8/IF($B$8=100000,10000,IF($B$8=10000,1000,IF($B$8=1000,100,)))

の部分は、「B8セルの値」を0で割る事になってしまいますのでエラーとなってしまいます。
 ですから、エラーにならない様にするためには「B8セルに1000,10000,100000以外の値が入力されていた場合」においてB8セルの値をどの様な数値で割れば良いのかを御教え願います。
 尚、もしも「B8セルには1000,10000,100000の3つの内の何れか1つの値しか入力される事は無い」という事であれば、

$B$8/IF($B$8=100000,10000,IF($B$8=10000,1000,IF($B$8=1000,100,)))

の部分の計算結果は必ず10になるのですから、

$B$8/IF($B$8=100000,10000,IF($B$8=10000,1000,IF($B$8=1000,100,)))

の部分を単に数値の

10

に差し替えてしまえば良いように思えるのですが、この部分を数値の10にしてしまう事で何か問題が起きる恐れはあるのでしょうか?


 他にもまだまだエラーとなる恐れがあるか所が沢山あるのですが、取りあえず上記の

$B$8/IF($B$8=100000,10000,IF($B$8=10000,1000,IF($B$8=1000,100,)))

の部分の問題を解決しない事にはどの様な関数とすれば良いのか(質問者様以外の人間には)判断する事が出来ませんので、「B8セルに1000,10000,100000以外の値が入力されていた場合」においてB8セルの値をどの様な数値で割れば良いのかという事と、上記の部分を単に

$B$8/10

にしてしまっても良いものなのかどうかという事に関して先に御教え願います。

投稿日時 - 2016-02-27 17:18:12

お礼

回答ありがとうございます。

とっさに質問したため、内容について説明不足なところが多くてすいません。
I5の部分は他の部分で計算された数値です。I5を計算する元のデータが数値でなければエラーになってしまうのですが。
また、B8はリストになっており数値しか入力できないようになっています。これは数値の単位です。

回答者様には分からないB8セルの疑問をいただいて、再度回答をくださる予定でいたと思うので申し訳ないのですが、他の回答者様の回答で解決することができました。
また、新たな質問があったときお手数をおかけしますがそのときはよろしくお願いします。

ありがとうございました。

投稿日時 - 2016-02-27 22:47:32

ANo.2

MID($D5,IF(OR(SEARCH("USD",$D5,1)=4,ISERROR(SEARCH("USD",$D5,1))),1,4),3)
この書き方では、エラーを回避できない。

左(最初)にある「SEARCH」がエラーになると、この式は、全体が「#vALUE!」のエラーになる。

すると、次にある「ISERROR」は、何の意味も成さない。

このMID関数は

MID($D5,IF(ISERROR(SEARCH("USD",$D5,1)),1,IF(SEARCH("USD",$D5,1)=4,1,4)),3)

のように書かないといけません(2か所あるので、2つとも直す)

投稿日時 - 2016-02-27 15:22:12

お礼

回答ありがとうございます。

IF関数の中にIF関数を入力しないとエラーは回避できないんですね。
解決することができました。

ありがとうございました。

投稿日時 - 2016-02-27 22:27:10

ANo.1

ISERROR() の結果を真偽で反転させたりせず、そのまま IF() の条件として、成り立つときに ROUNDDOWN($I5) なり 不成立のときに ROUNDDOWN($I5) なりを返すような論理構造にしてはいかがですか。

エラー表示をさせたくない時は ISERROR関数 Excel塾
http://kokodane.com/kan22.htm

投稿日時 - 2016-02-27 13:17:32

お礼

回答ありがとうございます。

>そのまま IF() の条件として、成り立つときに ROUNDDOWN($I5) なり 不成立のときに ROUNDDOWN($I5) なりを返すような論理構造にしてはいかがですか。

なるほど、分かりました。
解決できました。

ありがとうございました。

投稿日時 - 2016-02-27 22:24:51

あなたにオススメの質問