• ベストアンサー

IF関数で真の場合に四則演算の結果を返したい

IF関数で真の場合に四則演算の演算結果を返したいのですが、数式が文字列として表示されるだけで、演算してくれません。 (1)売上が60万未満の場合は0 (2)60万以上、70万未満の場合は売上の27.5% (3)70万以上の場合は30% この条件をIF関数を用いて自動計算したいと思っているのですが、上手くできません。 添付画像のF2欄に売上に応じた値を返したい場合の数式は =IF(F1<600000,"0",IF(AND(F1>=600000,F1<700000),"F1*C3",IF(G2>=700000,"+F1*C4"))) ではダメでしょうか? 上記数式で計算すると、(1)の場合は0が返ってくるのですが、(2)の場合はF1*C3の演算結果ではなく文字列が返ってきてしまいます。(3)の場合も同様にセルにはF1*C4と表示されるだけです。 どなたかご教示願えれば幸甚です。 ちなみにmac版Office2011 です。 よろしくお願いいたします。

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

  • ベストアンサー
  • shintaro-2
  • ベストアンサー率36% (2266/6244)
回答No.2

>=IF(F1<600000,"0",IF(AND(F1>=600000,F1<700000),"F1*C3",IF(G2>=700000,"+F1*C4"))) 駄目です 全部引用符を取ってください。 =IF(F1<600000,0,IF(AND(F1>=600000,F1<700000),F1*C3,F1*C4)) となります 最後の>=700000は、成立しない場合の条件が入っていませんし、 そもそも、60万未満でない場合に60万以上70万未満でなければ、自動的に70万以上ですので、不要なIF文です。

asknorco
質問者

お礼

おっしゃるとおりにやったらできました!有難うございます。数式に引用符は不要なんですね!勉強になりました。最後のIF文もおっしゃる通りです(汗)

その他の回答 (2)

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.3

もうちょっと整理して =IF(F1>=700000,C4,IF(F1>=600000,C3,0))*F1 とか,逆向きに =IF(F1<600000,0,IF(F1<700000,C3,C4))*F1 とか,端から順に削っていくと,もう少し判りやすいかもしれません。

asknorco
質問者

お礼

有難うございます!

  • maiko0318
  • ベストアンサー率21% (1483/6970)
回答No.1

"F1*C3" "+F1*C4" 計算式は"で囲ってはいけません。

asknorco
質問者

お礼

数式に引用符は不要なんですね!有難うございます!

関連するQ&A

  • エクセルのif関数で

    エクセルのif関数でこれができるのかわかりませんが、 C1~C10の中の文字列の中にA1と同じ文字列があればB1に「1」を入れ、なければ「2」を入れるということをやりたくて B1のセルに IF(OR(C$1:C$10=A1),1,2) という計算式を入れました。 関数の引数の中の数式の結果では、正しい結果が表示されてるのですが、B1のセルには間違った結果が表示されます。 また、B2以下B20まで計算式をコピーするとB11以下は#VALUE!になってしまいます。 一つ一つを見てみると、どうやらセルに正しく表示されるのはAの行とCの行が=だった場合のみのようです。 #VALUE!が表示されているセルも含めて、数式の結果では正しい結果が出ているのにセルの表示が違っているのが納得できませんが、おそらく何かが間違っているのでしょう。 間違いを教えてください。 よろしくお願いします。

  • IF関数で計算する

    J4セルへ入れている関数と式 =IF(F4=11,J3+C4,IF(G4=11,J3-C4,J3)) F・G列にはコード C列には金額 J列には差引残高  J3の残高に対してF4が11だったらJ3+C4を        もしG4が11だったらJ3-C4で差引残高を。。 質問です F・G列に入れている数字が11だけだと成立しているのですが やりたいことは11・12・13・14と四つのコードどれが入った場合でも 上記の計算式を成立させたい。 よろしくお願いします。     Jin1118

  • PHPの四則演算について

    整数が代入される変数が5つ($a $b $c $d $e $f)あります。 整数の範囲はそれぞれの変数でバラバラです。 $aが1から10まで $bが1から200まで $cが1から50まで といった具合です。 PHPで全ての変数を四則演算して1から46の範囲に収めたいと思っています。 いったいどのような数式にしたら良いのでしょうか?

    • ベストアンサー
    • PHP
  • エクセルのif関数で8つ以上ある場合について教えて下さい。

    エクセルのif関数で8つ以上ある場合について教えて下さい。 バージョン:エクセル2002 以下のような場合       1,000未満 → A 1,000以上 1,500未満 → B 1,500以上 2,000未満 → C 2,000以上 2,500未満 → D 2,500以上 3,000未満 → E 3,000以上 3,500未満 → F 3,500以上 4,000未満 → G 4,000以上 4,500未満 → H 4,500以上 5,000未満 → I 5,000以上       → J 現在のエクセルバージョンでは、 if関数の7レベルを超えてしまい、Lookup関数では一致した値しか拾ってくれません。 このような場合、以上、未満などの比較演算子を使用した範囲内の数値の分岐結果を取得するには どのようにすればよいのでしょうか? 現在は、次のように表を作成して行っております。     A     B   C  ←セル列  1        1,000  A  2  1,000   1,500  B  3  1,500   2,000  C  4  2,000   2,500  D  5  2,500   3,000  E  6  3,000   3,500  F  7  3,500   4,000  G  8  4,000   4,500  H  9  4,500   5,000  I  10  5,000        J  ↑ セル行 別の関数などを使用してできる場合(VBA不可)などでも構いませんので、 どなたかご教授願います。 宜しくお願いします。

  • C言語で四則演算を使って結果が10になる数式

    C言語のプログラミングについて質問です。 四つの一桁の数字を入力して四則演算を使って結果が10になる数式を作りたいのですが、イメージが湧きません。 教えていただけますか? 例:1234enterkey 答え2*3+1*4 数値の変数はint型でお願いします。int型ですので小数点以下を使って10になる結果は出さなくて宜しいです。お願いします。

  • エクセルで計算の結果がある数値の場合のみ文字列を表示させたいです・・・。

    エクセルで計算の結果がある数値の場合のみ文字列を表示させたいのですが、IF関数を使うのかなと思いますが関数がよく解かりません。。。 やりたいことはこんな感じです。 セルG1にはA1-B1、H1にはC1-D1、I1にはE1-F1と計算式が入っています。 計算の結果、▲1になるセルだけを文字列『売上』と表示させたいのですが・・・。 なお、計算の結果は、必ず『1』か『▲1』のどちらかにしかなりません。 つたない質問ですが解決したく困っています。よろしくお願いします。

  • エクセルIF関数

    A列に鉄板と和食の種別 B 売上 A1が鉄板だった時、B1の売上を C1に表示する このような条件の場合、IF関数を使うのでしょうか? IF関数をネットで検索しましてもちょっとこのような数式は当てはまらないのかな と思っております。 もしどのような関数を使えばいいのか教えて下るかたがいらっしゃいましたら よろしくお願いします。 レストランの売上をエクセルでおこないたいと考えておるものです。

  • ExcelでPC(パソコン)によって計算結果(演算結果)が違う

    Excel2003 SP2 を使用しています。 類似の質問は見つけられませんでした。 以下のような表の中で、※☆の部分は配列数式を用いているのですが、上司のPC(甲と呼びます)と私のPC(乙と呼びます)とで   セルの演算結果 が異なります。 私自身、最小二乗法の理論的なことは漠然と知っていても、PCが演算する際にどう計算しているか、まではわからないので、演算バグかどうか・どうしたら解決するかを知りたいです。 Excelに限らずコンピューターは浮動小数点誤差が生じるものと聞いていますし、特に二乗の計算を繰り返して近似式を求めさせる場合には必ずしもパソコンは信用できないかも知れませんが、演算バグならば、甲と乙とで同じバグ(数値)になると期待するのですが…。PCによって見える計算結果が違うとなると、そのファイルは仕事で信用して使えない、とも言えるので困っています。 前置きが長くなりましたが、具体的には ↓こんな表があります。↓ 行列 A   B   C 1   2        3          ※ 4          ☆ 5        6    X  K  Y  7    1  30  2 8    2  15  #N/A 9    3  30  6 10   4  15  #N/A  11   5  30  10 12   6  15  #N/A 13   7  30  14 14   8  30  16 15   9  15  #N/A 16  10  15  #N/A 17  11  15  #N/A 18  12  30  24 19  13  30  26 20  14  15  #N/A 21  15  15  #N/A 22 23 ↑ここまで↑ (22・23行目は、範囲指定のためのダミー行) A列・B列は数値です。 セルC7 には =IF($B7<30,#N/A,$A7*2) と入れて、後は21行目までオートフィルです。 つまり、K(B列)が30以上の時だけ同じ行のY(C列)に数値が現れるようにしています。 このX(A列)とY(C列)の近似式をとると、   Y=2X となるはずです。つまり   傾き   2   Y切片  0 です。 そこで、この 傾き を SLOPE 関数で Y切片 を INTERCEPT 関数で 求めることにしました。 ※(セルC3)に =SLOPE(IF(ISNUMBER(C7:C23),C7:C23,""),$A7:$A23) ☆(セルC4)に =INTERCEPT(IF(ISNUMBER(C7:C23),C7:C23,""),$A7:$A23) と入れて下さい。配列数式なので 数式入力の際、   Ctrl+Shift+Enter で決定する必要があります。 正しく配列数式として入れ終わると、数式が{ }で囲まれるはずです(やり直しが利きます)。 Excelのシートは「新規作成」でデフォルトのままなので、各セルの書式は「標準」のままです。セルの場所は上の通りでなくてもかまいません。 [第1段階] 乙で上の2式を入力すると、 ※ は 2 ☆ は 0 という正しい結果が得られたので、甲にメール添付で送信しました。 [第2段階] 甲でも ※ は 2 ☆ は 0 と表示されましたが、上の2式のセルそれぞれを覗いてただ Enter だけで決定し直すと、 ※ は #VALUE! ☆ は #VALUE! となります(配列数式でなくなるからです)。そこでもう一度上の2式のセルそれぞれを覗いて、Ctrl+Shift+Enter で決定し直すと、 ※ は  1.888 ☆ は -1.104 という謎の演算結果が現れました。 [第3段階] 甲の「謎の演算結果」を含むファイルを別名で保存してメール添付で送り返してもらうと、乙でも ※ は  1.888 ☆ は -1.104 と表示されることが確認できました。 しかし、乙で上の2式のセルそれぞれをCtrl+Shift+Enter で決定し直すと、 ※ は 2 ☆ は 0 という正しい結果が得られました。 [第4段階] 乙で戻るボタンを押して「謎の演算結果」をもう一度見ようとしましたが、戻ると ※ は 2 ☆ は 0 という正しい結果になっていました。 つまり、甲から乙に送り返してきたファイルでは 1.888 など(謎の演算結果)が表示されていたのは、甲の演算能力に依存した演算結果で、 第3段階後半や第4段階で 2 など(正しい演算結果)は乙の演算能力に依存した演算結果ということでしょうか。両者のマシンスペックの差はありますが、Excelは同じ修正モジュールを適用済みのはずです。 SLOPE や INTERCEPT には触れなくてかまいませんから、 別の関数を例に挙げていただいてけっこうですから(結局、小数の足し算とかと同じですか?)、 どのPCでも同じバグ(演算結果)が出る のではなく、PCによって結果が異なってくる という問題の解決法をご教授願います。

  • 四則演算プログラム

    2つの数字を四則演算するプログラムを作ろうと 思っているんですが、 (1)関数atoiを使う、 (2)int main(int argc, char +argv[])と  宣言する、 (3)足し算の場合のみ、2つ以上の数字を計算できる ということが条件なんですけど、どなたか プログラムがどのようなものか教えていただけ ませんか??

  • C言語における複素数の四則演算について

    複素数の四則演算(a+biとc+diの四則演算)について、for文を用いて表示するプログラムについて、???の部分に何を入れたらよいかわからず、うまく実行することができません。和・差・積・商の計算種別を入れるみたいなのですが、何を入れたらいいのかわかりません。 #include <stdio.h> void fukuso(double a,double b,double c,double d,double *e,double *f,int keisan); int main(void) { double a=4, b=8, c=4, d=3, e, f; int i; for(i=1;i<5;i++){ fukuso(a,b,c,d,&e,&f,???); if(i==1) printf("和演算\n"); else if(i==2) printf("差演算\n"); else if(i==3) printf("積演算\n"); else printf("商演算\n"); printf("e=%f f=%f i\n",e,f); } return (0); } void fukuso(double a1,double b1,double a2,double b2,double *a3,double *b3,int keisan) { if(keisan==1){ *e=a+c; *f=a+c; } else if(keisan==2){ *e=a-c; *f=b-d; } else if(keisan==3){ *e=a*c-b*d; *f=a*d+c*b; } else{ *e=(a*c+b*d)/(c*c+d*d); *f=(-a*d+c*b)/(c*c+d*d); } }

専門家に質問してみよう