• ベストアンサー

エクセルのIF関数について

エクセルの数式でIFを使って、下記のような複数の条件の時に、それぞれの計算結果を算出する式を作りましたが、単純に条件を並べただけで(IFとAND使用)、式が長くなってしまいます。これを短く出来る式の方法はありますでしょうか?(他の関数を使用する方法など)また、エクセルの関数の数式を応用編まで詳しく調べられるサイトをご存知でしたら教えてください。 (条件の例)R1への式入力 (1)A1がに"A"か"B"かを入力 (2)A1がAで、B2の値がC3以下の時、R1には8、C3より大きい場合は、B2-C3の値を表示 (3)A1がBで、B2の値がC3以下の時、R1には5、C3より大きい場合は、(B2-C3)/2の値を表示 といった条件を満たすものが作成したいです。 ちなみに私が作成した式は、 =IF(AND(A1=A,B2<=C3),8),IF(AND(A1=A,B2>C3),B2-C3,・・・・)って感じです。こんな方法しか無いでしょうか?

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

  • ベストアンサー
  • a987654
  • ベストアンサー率26% (112/415)
回答No.2

IF文を使わずにこんな式で実現できます。 =(A1="A")*((B2<=C3)*8+(B2>C3)*(B2-C3))+(A1="B")*((B2<=C3)*5+(B2>C3)*(B2-C3)/2) (A1="A")のような条件式は数値を掛けることにより 真=1、偽=0として作用させることができますので 上記のような数式が成立します。 ご参考まで

brackpanda
質問者

お礼

へぇ~、初めて知りました。すごく勉強になりました。ありがとうございます。

その他の回答 (2)

  • A88No8
  • ベストアンサー率52% (836/1606)
回答No.3

こんにちは 帰宅途中の電車の中でプログラミング言語BASICに起き変えて考えてみます。 IF A1="A" THEN 'この条件だけひろう  IF B2<=C3 THEN   LET R1=8  ELSE     ' IF C3<B2であることは明かなので略   LET R1=B2-C3   ENDIF ELSEIF A1="B" THEN 'この条件だけひろう  IF B2<=C3 THEN   LET R1=5  ELSE     ' IF C3<B2であることは明かなので略   LET R1=(B2-C3)/2  ENDIF ENDIF 上記の考えをエクセルの構文にあてはめると.. =IF(A1="A",IF(B2<=C3,8,B2-C3),IF(A1="B",IF(B2<=C3,5,B2-C3),"DATA ERROR") といったものが作成できました。 オーソドックスでしょ。合っているか検証できていませんけれど。

brackpanda
質問者

お礼

かっこいい回答ありがとうございました。 しかし私には少し難しいようです。 勉強してみます。

  • kmetu
  • ベストアンサー率41% (562/1346)
回答No.1

個人的には短くてトリッキーなものより長いけどわかりやすいものの方が 後々メンテするときにやりやすいと思います。 また、brackpandaさんが作った式はエラーになると思いますよ。 ちなみに「C3より大きい場合」というのはC3以下以外と考えれば 条件式は書かなくてもいいですよね。 =IF(AND(A1="A",B2<=C3),8,IF(A1="A",B2-C3,IF(AND(A1="B",B2<=C3),5,IF(A1="B",(B2-C3)/2,""))))

brackpanda
質問者

お礼

確かに。アドバイスありがとうございました。

関連するQ&A

専門家に質問してみよう