- ベストアンサー
if関数の順番 iserrorが認識されない
- =IF(ISERROR(A2),"丙",IF(ISERROR(B2),"乙",IF(B2="","甲",B2-A2+1)))という複合式で、ISERRORが正常に値を返さない問題が発生します。
- 関数の順番を変えると、=IF(B2="","甲",IF(ISERROR(A2),"丙",IF(ISERROR(B2),"乙",B2-A2+1)))という式では#VALUE!エラーが表示されます。
- =IF(OR(B2="",ISERROR(A2),ISERROR(B2)),"",B2-A2+1)を使用しても同様のエラーが発生します。関数の順番が影響している可能性があります。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
エラー値はエラー値であって、論理演算を含めすべての演算ができま せん。エラーが空白と等しいとかエラーが0より大きいとか、エラー に1を足すといくつになるかとか、そんなことは意味がないのです。 よって、最初にB2=""という論理演算をさせようとした時点であなた の負けです。if関数は真偽の判定ができず、エラーを返します。ご執 心のiserror関数は、if関数の判定式がFALSEを返したときにだけ実行 される部分にありますから、if関数の判定式がエラーを返してしまえ ば実行される機会はありません。 基本的には、#value!エラーなんてものを放置しないで、ちゃんと決 着をつけるものですけどね。
その他の回答 (1)
- sige1701
- ベストアンサー率28% (74/260)
質問の主旨をどのようにとらえていいのか迷いますが・・・ =IF(COUNT(A2:B2)=2,B2-A2+1,"日付を入れて下さい") >関数の順番を変えただけで、なぜ ISERROR が正常に値を返さないのでしょうか? 式の順番に計算するからでは? =IF(B2="","甲",~) B2=""の論理演算の時点でエラーとなります。
お礼
早速のご回答ありがとうございます。 実際には A2 にも B2 にも式を入れてあります。 A B 2行 =IF(E2="","",E2+1) =("2006/"&F2)*1 値は例えば 10/1 10/25 となります。 E2 や F2 が文字列XYZなどの不適切な値だと、上の式により A2 や B2 が #VALUE! となるので、 C2 に 甲や乙や丙の文字または 空白(ヌル)を表示したくて、 =IF(B2="","甲",IF(ISERROR(A2),"丙",IF(ISERROR(B2),"乙",B2-A2+1))) や =IF(OR(B2="",ISERROR(A2),ISERROR(B2)),"",B2-A2+1) という式を入れたのです。 IF式P(IF式Q(IF式R、)) の順だと IF式Qはちゃんと働く(つまりこの場合は、B2 が #VALUE! のとき、値”乙”を返す)のに、 IF式R(IF式P(IF式Q、)) の順だと IF式Qはエラー(つまりこの場合は、B2 が #VALUE! のとき、#VALUE! を返す)となる という現象について尋ねたつもりでした。 説明を省略し過ぎましたが、今回の場合はCOUNTはちょっと都合が悪いです。 >式の順番に計算するからでは? >=IF(B2="","甲",~) >B2=""の論理演算の時点でエラーとなります そうですか? C2に =IF(B2="","甲",IF(ISERROR(A2),"丙",IF(ISERROR(B2),"乙",B2-A2+1))) という式を入れている時、 B2に =("2006/"&F2)*1 という式を入れて、ここが #VALUE! となると、 C2も #VALUE! となりますが、 B2の中身を削除(空白に)すると、 C2はちゃんと”甲”になりますので、 IF式R(この場合はIF(B2="","甲",~ )は論理演算できていると思いますが?
お礼
なるほど! B2=#value!エラー のときは B2=""という論理演算 は無視してくれるかと思って 深く考えずにIFを連ねていましたが、確かに論理演算させることに無理がありました。 =IF(X99="","",~) は私のクセみたいなものですが、 =IF(ISERROR(X99),"",ー) の方を先に持ってくるように意識するべきだということですね。 バリューが入る可能性のあるセル、を使う演算、について、勉強になりました。ありがとうございます。