• ベストアンサー

複数の条件があった場合の条件式について

エクセルで期間を計算し。 2日以内の場合、期間×100 3日以上6日以下の場合、期間×200 7日以上9日以下の場合、期間×300  10日以上13日以下の場合、期間×400  14日以上20日以下の場合、期間×500 21日以上31日以下の場合、期間×600 1ヵ月以上2ヵ月以下なら、期間×700 2ヵ月以上3ヵ月以下なら、期間×800 上の条件もに基づいた、条件文を作りたいのですが、 IF文でひたすら、作っていくと、引数エラーになりました。 何か良い方法をご存じの方がおりましたら、 お知恵をお貸しいただければ幸いです。 よろしくお願いいたします。

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

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

ちなみにどうしてもIF関数を使ってヤリタイご相談も実際は少なくありませんが,そういうときは =IF(期間<=2,期間*100) + IF(AND(3<=期間,期間<=6),期間*200) + IF(AND(7<=期間,期間<=9),期間*300) + IF(AND(10<=期間,期間<=13),期間*400) + IF(AND(14<=期間,期間<=20),期間*500) + IF(AND(21<=期間,期間<=31),期間*600) + IF(AND(1<=DATEDIF(A1,B1,"M"),DATEDIF(A1,B1,"M")<=2),期間*700) + IF(AND(2<=DATEDIF(A1,B1,"M"),DATEDIF(A1,B1,"M")<=3),期間*700) のように,カッコの中に重ねていくんじゃなくこうやって足し寄せていくと,随分沢山の条件で書き込む事もできます。 とまぁ,どうしてもIFを使いたい条件の重ね合わせでヤリタイ,ムズカシイ関数は考えるのも見るのもイヤだというご相談向けの回答でしたが,多分他の人がアドバイスを寄せてくれてると思いますがVLOOKUP関数やLOOKUP関数を利用した方が,間違えることもなく綺麗に計算できます。 添付図F2 =E2*VLOOKUP(E2,A:C,3)

nimo9876
質問者

お礼

ありがとうございます。 早速参考にさせていただきます。

その他の回答 (3)

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.4

こんにちは! 横からお邪魔します。 質問を読ませていただくと、日数による違いと月数による違いがありますよね? 当方の憶測ですが、31日という区切りの日数があるということは1か月以内とは31日以内と判断している訳ですよね? (開始日を含めての日数です) もしその場合、大の月・小の月を考えると 仮に4月1日から31日目は5月1日となってしまいます。 普通に考えると4月1日から30日目、すなわち4月30日が1か月以内という考えになると思いますので、 余計なお世話かもしれませんが、その1ヶ月の考え方から↓の画像のように表を二つ作成してみました。 実際は薄い緑色の列だけで良いのですが、判りやすくするために「未満」の列も表示しています。 画像のC2セルに =IF(D2="","",IF(B2>=EDATE(A2,1),VLOOKUP(DATEDIF(A2,B2,"m"),$J$2:$L$3,3,1)*D2,VLOOKUP(D2,$F$2:$H$7,3,1)*D2)) D2セル(検証するために敢えて開始日~終了日まで何日あるか表示させています)に =IF(COUNTBLANK(A2:B2),"",B2-A2+1) という数式を入れ、C2・D2セルを範囲指定しD2セルのフィルハンドルで下へコピーすると 画像のような感じになります。 尚、EDATE関数を使用するにあたって当方使用のExcel2003以前のバージョンでは メニュー → ツール → アドイン → 「分析ツール」にチェックを入れておく必要があります。 以上、長々と書いてしまいましたが余計なお世話ならごめんなさいね。m(__)m

nimo9876
質問者

お礼

ありがとうございます。 早速参考にさせていただきます。

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

このように条件が連続して細かく分かれている場合にはIF関数を考えるよりも、別に表を用意してVLOOKUP関数を使うことがおすすめです。 別の表を例えばE列とF列に作るとして、E1セルに0、F1セルに100、E2セルに3、F2セルに200、E3セルに7、F3セルに300、E4セルに10、F4セルに400、E5セルに14、F5セルに500、E6セルに21、F6セルに600、E7せるに31、F7セルに700、E8セルに62、F8セルに800のように入力します。 そこでA1セルに最初の日付、B1セルに終わりの日付があるとして、最初の日は期間に含めないとしたら次のような式になりますね。 =(B1-A1)*VLOOKUP(B1-A1,E:F,2,TRUE)

nimo9876
質問者

お礼

ありがとうございます。 早速参考にさせていただきます。

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

A1とB1に始めと終わりがあるとして,重要な要件として「期間」とは「間の日数」であって「両端日を含む」ではないとすると。 =IF(A1*B1,(B1-A1)*100*(1+(B1-A1>2)+(B1-A1>6)+(B1-A1>9)+(B1-A1>13)+(B1-A1>20)+(DATEDIF(A1,B1,"M")>=1)+(DATEDIF(A1,B1,"M")>=2)),"") などのように。

nimo9876
質問者

お礼

ありがとうございます。 早速参考にさせていただきます。

関連するQ&A