- ベストアンサー
IF関数
IF関数で下記のような式を作って見ましたがうまく答えが返ってきません。 条件は P9<=135416 の時は(P9-117501)×0.05 135417<=P9<=149999の時は(P9-(P9×0.4+63334))×0.05 150000<=P9<=299000の時は(P9-(P9×0.3+78334))0.05 で、一の位を四捨五入します。 135417以上になると0の答えが返ってきます。 式は次の通りです。 =IF(P9<=135416,ROUND((P9-117501)*0.005,IF(135417<=P9<=149999,ROUND((P9-(P9*0.4+63334))*0.005,IF(150000<=P9<=299000,ROUND((P9-(P9*0.3+78334))*0.005,0))))))*10 どこが間違っているのでしょか?宜しくお願いします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
135417<=P9<=149999 という書き方はできません。等式、不等式は2項しか書けないのです。 上の式はAND関数を使って AND(135417<=P9,P9<=149999) と表すことができますが、その前にIF関数のP9<=135416の条件がFALSEのときに、こちらの式が評価されるので、135417<=P9の条件は必然的に書く必要はありません。 150000<=P9<=299000 も同様です。 それから、一の位を四捨五入するときは、ROUND(数,-1)と書けばよいです。最終的な結果を四捨五入したいのであれば、IF文の中にROUNDを書くのでなく、IF文全体をROUNDで囲んでやればいいと思います。 また、どの条件でも×0.05は共通しているので、それも外に出せばいいと思います。 したがって上の式は、 =ROUND(IF(P9<=135416,P9-117501,IF(P9<=149999,P9-(P9*0.4+63334),IF(P9<=299000,P9-(P9*0.3+78334),0)))*0.05,-1) と書くことができます。
その他の回答 (4)
- finneganswake
- ベストアンサー率23% (194/809)
135417<=P9<=149999とかってところが良くないような。 AND(135417<=P9,P9<=149999) というようにしないといけないような気がする。 =IF(P9<=135416,ROUND((P9-117501)*0.05,-1),IF(AND(135417<=P9,P9<=149999),ROUND(P9-(P9*0.4+63334)*0.05,-1),IF(AND(150000<=P9,P9<=299000),ROUND(P9-(P9*0.3+78334)*0.05,-1)))) でいいのかな。ROUND関数にも手を入れるともっといいかも。
- mshr1962
- ベストアンサー率39% (7417/18945)
IF文の前の条件で処理されるため短くできるもの 【誤】135417<=P9<=149999 →【正】P9<=149999 【誤】150000<=P9<=299000 →【正】P9<=299000 数式で()を外せば短くなるもの P9-(P9*0.4+63334) → P9*0.6-63334 P9-(P9*0.3+78334) → P9*0.7-78334 あとROUND(数式,-1)で一の位を四捨五入できます。 まあ纏めるなら =ROUND(IF(P9<=135416,P9-117501,IF(P9<=149999,P9*0.6-6334,IF(P9<=299000,P9*0.7-78334,0))*0.05,-1)
お礼
ありがとうございました。 文を作る前に数式を整理しておくべきですね。
- kady
- ベストアンサー率26% (9/34)
IF関数の論理式には複数の比較演算子は入れられませんので、 先ほどの式を基にすると =IF(P9<=135416,ROUND((P9-117501)*0.005,2),IF(P9<=149999,ROUND((P9-(P9*0.4+63334))*0.005,2),IF(P9<=299000,ROUND((P9-(P9*0.3+78334))*0.005,2),0)))*10 が正しいと思われます。 どうでしょう、自信ないですが。
- yaburegasa
- ベストアンサー率44% (596/1335)
IF関数の書き方から、EXCELの関数と理解しましたがよろしいでしょうか?! >どこが間違っているのでしょか? EXCELでIF関数を記述する時の、条件式は 135417<=P9<=149999 という様な書き方はできません。 必要に応じて、IF入れ子構造にするか、AND関数等をご使用ください。
お礼
ありがとうございました。 とてもよく解りました。まだまだ関数の勉強不足です。 がんばります。