• ベストアンサー

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 どこが間違っているのでしょか?宜しくお願いします。

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

  • ベストアンサー
  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.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) と書くことができます。

syakutori64
質問者

お礼

ありがとうございました。 とてもよく解りました。まだまだ関数の勉強不足です。 がんばります。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (4)

回答No.4

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% (7418/18948)
回答No.3

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)

syakutori64
質問者

お礼

ありがとうございました。 文を作る前に数式を整理しておくべきですね。

全文を見る
すると、全ての回答が全文表示されます。
  • kady
  • ベストアンサー率26% (9/34)
回答No.2

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)
回答No.1

IF関数の書き方から、EXCELの関数と理解しましたがよろしいでしょうか?! >どこが間違っているのでしょか? EXCELでIF関数を記述する時の、条件式は 135417<=P9<=149999 という様な書き方はできません。 必要に応じて、IF入れ子構造にするか、AND関数等をご使用ください。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • IF関数とROUNDの組み合わせが上手くいきません。

    初級者ですが、仕事で必要なので助けてください。 エクセル2003で、A1~F1の数字を掛算割算して、結果をG1に反映します。G1の計算結果が9万9千9百までは10の位まで四捨五入、10万以上なら100の位を四捨五入というふうにしたいのですが、どうも上手くいきません。(そもそもIF関数では無理なのでしょうか?) =IF(G1>=99999,ROUND(A1*B1/C1*D1*F1,-3),G1<=100000,ROUND(A1*B1/C1*D1*F1,-4)) この式をちょっと変えたりして色々試してみているのですが、-3,-4の設定で10の位、百の位は変えられても99999/100000の間では変化してくれません。どうすればよいのでしょうか。

  • エクセルの関数。お願いします!

    任意の桁数で四捨五入するROUND関数についてお願いします。 A1「5678.492」の数値。 (ア)小数点以下を四捨五入しなさい。 (イ)1の位を四捨五入しなさい。 =ROUND(A1,○)の○には何が入るんでしょうか?

  • エクセルの関数を複数使いたい

    こんにちは、教えてください エクセルの関数を同時に複数使いたいときはどうしたらよいのでしょうか? 具体的には A1とA2を掛けて1000で割りたものをC1に表示させたいのです。 ただし、 (1)計算をしていないときにはC1に何も表示させたくない。 (2)小数点以下2桁で四捨五入したいのです。 (3)計算式をいったん別のところに表示させず、直接C1にだしたい。 以上の条件をかなえたいのですが、掛け算・割り算の式や、表示の条件を変えるのにIFを使用したり、四捨五入をするのはROUNDを使うのは発想できたのですが、組み合わせ方が分かりません。(表示形式で設定してしまうと、0.20などの際に0.2とはならないので・・・関数を使いたいのです) よろしくお願いします

  • IF関数の複数分岐

    IF関数の複数分岐について質問です。 条件が多すぎて私の知識では手に負えない状態なので、どなたか教えてくださると助かります。 ・A1が○だったら● ・A1が△、かつB1が▽だったら▲÷2 ・A1が△、かつB1が□だったら▲÷4 ・上記のどれにも当てはまらない場合は0 この条件でどうにかifでクリアできませんでしょうか? それに加えて、求められた値を四捨五入し1000の位で丸めたい(単位を千)にしたいのです。 どなたか宜しくお願いいたします。

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

    ROUND関数を使い、千の位で四捨五入するのですが24081000の場合は、どう入力したらいいでしょうか? また13416000のときはどう入力したらいいでしょうか? 宜しくお願いします。

  • Excelの関数を探しています

    ・上4桁目で四捨五入する ・1の位を0で表示する この2つの条件を満たす関数を探しています。いくつか試してみたのですがうまくいかず…何か良い式はありますでしょうか? 例) 1 →0 12 →10 123 →120 1234 →1230 12345 →12300 123456→123000 666666→667000

  • round関数について

    試しにエクセルで次の計算をしてみてください。 -16.76 7.9 -11.45 -8.88 -1 4.26 33.78 以上を全部足します。つまり「=sum(a1:a7)」です。当然「7.85」になります。 次に四捨五入します。round関数で小数点第2位を四捨五入して、第1位まで表示させます。つまり、「=round(sum(a1:a7),1)」ということです。すると「7.8」を返しました。 ん?「7.9」なのでは?と思い、次にこんな計算をしてみました。 A・・・=round(sum(a1:a7),2) B・・・=round(A,1) つまり、Aでいったん小数点第3位を四捨五入させた上で、その値を今度はBで小数点第2位を四捨五入させ、最終的に小数点第1位まで表示させたわけです。すると、ちゃんと「7.9」を返しました。 なんでこんな風になるのでしょうか?どうして一発で「7.9」にならないのでしょうか?

  • IF関数を短くする方法(階層が深すぎる)

    A列に任意の数値が入っています。 そのときB列に、 「A1<999」なら「A1×5.0」して四捨五入 「1000<A1<2000」なら「A1×4.0」して四捨五入 「2000<A1<3000」なら「A1×3.0」して四捨五入 「3000<A1<4000」なら「A1×2.0」して四捨五入 「4000<A1<5000」なら「A1×1.5」して四捨五入 「5000<A1<6000」なら「A1×1.0」して四捨五入 とした計算式を入れたいとおもってます。 IF関数にするとものすごく長くなってしまいます。 短くしたり、他に適応する関数はあるでしょうか? よろしくお願いいたします。

  • 関数について

    一つのセルに、平均値を出し、それを四捨五入したいのですが、 関数を複合設定するにはどうすれば良いのでしょうか。 例えば、=AVERAGE(T4:T34)で出した平均値を、=ROUNDを使用して、小数点第1位で四捨五入したいのですが、式はどうすれば良いのでしょうか?

  • Round関数は四捨五入?

    あるサイトで・・・ ”多くのRound関数は、偶数丸めを採用しており、 丸め単位のまんなかで、どっちつかずの場合は、偶数側を採用する。” ということが書いてあるのを読みました。 しかし、SQL Server2000のクエリで select round(1.25,1) と実行すると 1.2ではなく1.3 が返ってくるので、四捨五入されている気がします。 厳密な四捨五入と異なる値が返ってくるパターンはどういう式でしょうか? それとも、SQL Server2000のRound関数は厳密な四捨五入なのでしょうか? ご存知の方がいたら教えてください。 よろしくお願いします。