- ベストアンサー
EXCEL関数についての質問
- EXCELの関数を使用して数式計算を行う際、一部のセルの参照によってエラーが発生する場合の解法を求めます。
- 問題が発生するセルの数式は、参照先のセルが空白の場合に計算エラーが発生します。
- スマートな解決策を探し求めており、VBマクロなどの方法も歓迎していますが、基礎的な説明を含めて教えていただきたいです。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
わざわざISBLANK関数を使わず B1: =IF(A1="","",50/B2*100) C1: =IF(B1="","",100-C2) のように計算した方が,モアシンプルと思います(いや,もちろんセンスの問題ですが)。 #余談 なお,ご質問に書かれている数式はそれぞれB1がB2,C1がC2も計算に使用しているので,たとえばA1に数字があってもA2に数字が無くて2行目に""が計算されている場合,1行目(B1,C1)はエラーになります。 この波及効果で,たとえば10行目のA列(A10)が空だった場合,その上のB1:B9,C1:C9は全滅で全てエラーになります。 「状況を簡略化して説明すると以下のとおりです。」という事なので,ホントはそういう問題は発生しないようにちゃんと作成できていることを祈ります。
その他の回答 (3)
- kagakusuki
- ベストアンサー率51% (2610/5101)
>B1がBLANKの場合でも計算が行われ、結果として#VALUE!のエラーとなります。 C1セルに入力されている関数が、 =IF(ISBLANK(B1),"",100-C2) というものである場合には、 100-C2 という計算には、B1セルの値は使用されていませんから、 例えB1セルが空欄や文字列であった場合でも、C2セルに数値データが存在していれば、エラーとはなりません。 しかし、C2セルが関数によって空欄となっている場合には、B1セルが空欄ではなくとも、エラーとなってしまいます。 又、C2セルが空欄ではなくとも、文字列が入力されている場合には、やはりC1セルはエラーとなってしまいますから、 「C2セルが空欄の場合は、C1セルを空欄にする」のではなく、 「C2セルに数値データが存在していない場合には、C1セルを空欄にする」という様にしなければなりません。 同様に、B1セルの関数も、エラーとなるのか否かは、A1セルの値には関係なく、B2セルの値によって決まる事です。 B1セルに入力されている関数では、B2セルの値は、割り算の除数(分数の分母)として使用されていますから、B2セルのデータが、空欄や文字列だけではなく、0の場合にもエラーとなってしまいます。 従って、エラーを出したくないだけでしたら、B1セルの関数は次な様なものとなります。 =IF(AND(ISNUMBER(B2),B2<>0),50/B2*100,"") そして、C1セルの関数は次な様なものとなります。 =IF(ISNUMBER(C2),100-C2,"") 又、エラーを出さないだけではなく、A1セルが空欄の際には、「50/B2*100」の計算結果がエラーとならない場合でも、必ずB1セルも空欄としなけれはならない場合には、B1セルの関数は次な様なものとなります。 =IF(AND(A1<>"",ISNUMBER(B2),B2<>0),50/B2*100,"") 同様に、B1セルが空欄の際には、「100-C2」の計算結果がエラーとならない場合でも、必ずC1セルも空欄としなけれはならない場合には、C1セルの関数は次な様なものとなります。 =IF(AND(B1<>"",ISNUMBER(C2)),100-C2,"")
お礼
なるほど。ANDを使えば複数条件対応が可能なのを忘れていました。 今回のケースでは回答2の方で対応が可能でしたが、こういうやり方もあるということは覚えておきます。勉強になりました。 ご回答ありがとうございました。
- KURUMITO
- ベストアンサー率42% (1835/4283)
ISBLANK(B1)という場合にはB1セルが完全に空白のセルであって式などが入力されている場合には空白のセルとは認識されません。式が入力されていてセルが空白となっている場合には単に""を使うことで良いでしょう。 例えばB1セルには =IF(A1="","",50/B2*100) C1セルには =IF(B1="","",100-C2) といった式を入力すればよいでしょう。
お礼
回答2のkeithinさんも同様の回答でしたが、やはりISBLANK関数よりはA1=""の方が、良いのでしょうかね。この方法ならエラーは出ないので使わせて頂きます。 ご回答ありがとうございました。
- mt2008
- ベストアンサー率52% (885/1701)
単純にC1の式を↓で、良いのでは? =IF(ISBLANK(A1),"",100-C2)
お礼
確かにA1依存なら問題ないですね。目からウロコでした(笑 ご回答ありがとうございます。
お礼
確かにこっちのほうがずっとスマートな式ですね。勉強になりました。 ご回答ありがとうございました。