• ベストアンサー

excelでのIF関数

excelで表を作っています。 0~29なら「2」、30~59なら「3」、60~79なら「4」、80~100なら「5」という関数を作りたいのですがうまくいきません。 『=IF(A1="","",IF(A1>=85,"A",IF(A1>70,"B",IF(A1>=50,"C",IF(A1>=30,"D","E")))))』というほかの方の質問されているIF関数を参考に作ったのですが…だめでした。 わかる方がいれば教えてください。 vlook関数は使わずに、if関数で作りたいです。 よろしくお願い致します。

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

  • ベストアンサー
  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.2

80以上は5,0以下は空白にするのでしたら次の式で良いでしょう。大きい数値からIF関数を使って決めていきます。 =IF(A1="","",IF(A1>=80,5,IF(A1>=60,4,IF(A1>=30,3,IF(A1>=0,2,""))))) しかし、ご質問の数値の範囲を空白にするのでしたら次のようなANDを使った式にすることが必要です。この場合には範囲を一つ一つ決めていくことになりますので大きい数値から決めていく必要もありません。 =IF(A1="","",IF(AND(A1>=0,A1<30),2,IF(AND(A1>=30,A1<60),3,IF(AND(A1>=60,A1<80),4,IF(AND(A1>=80,A1<=100),5,""))))) 式の意味はもしもA1セルが空白の時は空白に、もしもA1の値が0以上で30未満の場合には2を、もしも30以上で60未満の場合には3を・・・・・・もしも80以上で100以下の場合には5にしなさいということになります。

haru1133
質問者

お礼

ありがとうございました。 IF関数を使いたかったので助かりました。

その他の回答 (7)

noname#204879
noname#204879
回答No.8

=IF(A1<0,"tbd",IF(A1<30,2,IF(A1<60,3,IF(A1<80,4,IF(A1<101,5,"tbd")))))

haru1133
質問者

お礼

ご回答ありがとうございました。

  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.7

参考までに。 >ただ、VLOOKUPは別表がいるのが面倒で使用したくないであれば次の様な関数は駄目でしょうか。 VLOOKUP関数でもLOOKUP関数と同様に配列定数を使用した数式にすれば別表の必要がありません。 すなわち、行方向のデータセットはカンマで、列方向のデータセットはセミコロンで区切った以下のような数式にします。 =VLOOKUP(A1,{0,2;30,3;60,4;80,5},2)

haru1133
質問者

お礼

ご回答ありがとうございます。 別表を作りたくないということ、当たっています。 今後、質問を詳しく書くようにいたします。 セミコロンで区切る方法、初めて知りました。 こんな良い方法があるとは、勉強になりました!! ありがとうございました。

  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.6

>『=IF(A1="","",IF(A1>=85,"A",IF(A1>70,"B",IF(A1>=50,"C",IF(A1>=30,"D","E")))))』というほかの方の質問されているIF関数を参考に作ったのですが…だめでした。 「だめでした」では問題点がわかりません。 基本的には、例示された数式を、そのまま区切りの数値を代入すれば(必要に応じて条件を1つ削除)、うまくいくと思うのですが、具体的にどのような式を入力したら、どのような部分で問題が出たのか例示されたほうが良いと思います。 >vlook関数は使わずに、if関数で作りたいです。 条件が多くなる複雑な条件では、他の関数を併用するほうがわかりやすいと思います(別表を作成する必要はありません)。 今回のケースなら、例えば配列定数を引数にしたLOOKUP関数を利用して以下のような数式で求めるのが簡単です。 =IF(A1="","",LOOKUP(A1,{0,30,60,80},{2,3,4,5}))

haru1133
質問者

お礼

ご指摘とご回答ありがとうございました。

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.5

このような場合、IF関数はネスト構造になり、数式が面倒や変更が難しくなるのでVLOOKUP関数が一般的です。 ただ、VLOOKUPは別表がいるのが面倒で使用したくないであれば次の様な関数は駄目でしょうか。  =LOOKUP(A1,{0,30,60,80},{2,3,4,5}) 因みにこの数式は未入力や100以上は別途考慮して下さい。

haru1133
質問者

お礼

ご回答ありがとうございます。 教えていただいたとおり、VLOOKUP関数が一般的なのでしょうが、別表を使用したくなかったので、VLOOKUP関数を使わずにIF関数での方法を望みました。 質問の時に詳しく書けばよかったと…反省です。 しかし、今後VLOOKUP関数を使用する際に参考にさせていただきます。

  • mzon
  • ベストアンサー率48% (26/54)
回答No.4

最後の80が30の倍数とずれているのでちょっと工夫はいりますが、 『=IF(A1="","",IF(A1>=80,5,INT(A1/30)+2))』 としてやれば計算できますよ、 『INT(A1/30)+2)』で 0~29は「2」、30~59は「3」、60~79は「4」 となるのですが、 80~89が「4」になってしまうので、 『IF(A1>=80,5』で、80以上は5としてます。 また、IF文ですべてを書く場合は 『=IF( AND(0<=A1,A1<=29),2,IF( AND(30<=A1,A1<=59),3,IF( AND(60<=A1,A1<=79),4,IF( AND(80<=A1,A1<=100),5,""))))』 とすればできます。

haru1133
質問者

お礼

考えてくださりありがとうございます。 いろんなやり方があるのですね。 参考になりました。

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.3

回答No2です。説明文が間違っていましたね。訂正させていただきます。 しかし、ご質問の数値の範囲を空白にするのでしたら次のようなANDを使った式にすることが必要です。⇒ しかし、ご質問の数値の範囲以外を空白にするのでしたら次のようなANDを使った式にすることが必要です。

haru1133
質問者

お礼

わざわざ訂正してくださり、ご親切にありがとうございます。 大変助かりました。

  • lulula
  • ベストアンサー率48% (23/47)
回答No.1

=IF(A1="","",IF(A1>=80,"5",IF(A1>=60,"4",IF(A1>=30,"3",IF(A1>=29,"2","2"))))) 間違っていたらすみません<(_ _)>

haru1133
質問者

お礼

考えてくださりありがとうございます。 参考に致します。

関連するQ&A