dポイントプレゼントキャンペーン実施中!

タイトルは検索用のためぶっきらぼうですが、よろしくお願いします。
以下のように、A列からB列までの日数を求めるのですが、AやBに ””(空白)や #VALUE!エラー が入ることがあるので、IF関数で回避させています。
     A    B      C列
2行  10/1  10/25    =B2-A1+1
                (C2は25となる)
                 ↓
               =IF(B2="","甲",B2-A1+1)
               または
               =IF(ISERROR(B2),"乙",B2-A1+1)
ところが、
=IF(ISERROR(A2),"丙",IF(ISERROR(B2),"乙",IF(B2="","甲",B2-A2+1)))
という複合式なら、甲、乙、丙はきちんと判別されるのに、


=IF(B2="","甲",IF(ISERROR(A2),"丙",IF(ISERROR(B2),"乙",B2-A2+1)))
という風に順を変えると、結果は
  #VALUE!
になってしまいました。
     A    B      C列
2行  10/1  #VALUE!   =IF(B2="","甲",IF(ISERROR(A2),"丙",IF(ISERROR(B2),"乙",B2-A2+1)))
               (C2は #VALUE! となる。乙にならない)

また、
=IF(OR(B2="",ISERROR(A2),ISERROR(B2)),"",B2-A2+1)
でも、同じように #VALUE!エラーになってします。

関数の順番を変えただけで、なぜ ISERROR が正常に値を返さないのでしょうか?

A 回答 (2件)

エラー値はエラー値であって、論理演算を含めすべての演算ができま


せん。エラーが空白と等しいとかエラーが0より大きいとか、エラー
に1を足すといくつになるかとか、そんなことは意味がないのです。

よって、最初にB2=""という論理演算をさせようとした時点であなた
の負けです。if関数は真偽の判定ができず、エラーを返します。ご執
心のiserror関数は、if関数の判定式がFALSEを返したときにだけ実行
される部分にありますから、if関数の判定式がエラーを返してしまえ
ば実行される機会はありません。

基本的には、#value!エラーなんてものを放置しないで、ちゃんと決
着をつけるものですけどね。
    • good
    • 0
この回答へのお礼

なるほど!
B2=#value!エラー のときは
B2=""という論理演算 は無視してくれるかと思って
深く考えずにIFを連ねていましたが、確かに論理演算させることに無理がありました。

=IF(X99="","",~)
は私のクセみたいなものですが、
=IF(ISERROR(X99),"",ー)
の方を先に持ってくるように意識するべきだということですね。

バリューが入る可能性のあるセル、を使う演算、について、勉強になりました。ありがとうございます。

お礼日時:2008/10/27 00:20

質問の主旨をどのようにとらえていいのか迷いますが・・・


=IF(COUNT(A2:B2)=2,B2-A2+1,"日付を入れて下さい")

>関数の順番を変えただけで、なぜ ISERROR が正常に値を返さないのでしょうか?
式の順番に計算するからでは?
=IF(B2="","甲",~)
B2=""の論理演算の時点でエラーとなります。
    • good
    • 0
この回答へのお礼

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

実際には 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="","甲",~ )は論理演算できていると思いますが?

お礼日時:2008/10/26 23:57

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!