• ベストアンサー

Excel 在籍期間に応じてボーナスの額を算出 条件式 計算式

こんにちは。下記の計算式を教えてくださいm(^_^)m 【期間に関する条件式】     A      B       C    D   E 1 2006/2/1   2006/3/10  2006/5/15  (バツ)         2 2006/1/10  2006/3/15         (マル)1,000 3 2006/2/1         2006/5/31 (マル) 1,500 4 2006/4/1  2006/4/15  2006/6/15  (バツ)         5 2006/3/10              (マル) 1,000 A列;入塾年月日(5行目については入塾と同時にAコース在籍) B列;BコースからAコースへのコース変更年月日(5行目については入塾と同時にAコース在籍のため、B列のコース変更年月日は空欄) C列;退塾の年月日(退塾する人だけ入力) D列;図書券を貰う資格の有無(ある人;マル印、無い人;バツ印) E列;図書券を貰う資格のある人の図書券の額 上記の説明です。ある学習塾で、Aコースに2006/2/1から2006/5/31まで在籍している人に、在籍期間に応じて図書券を「最大2000円分」プレゼントすることになりました。 C列の資格の有無の条件とD列の図書券の額の算出方法; 2006/2/1~2006/5/31までの期間を対象に下記を考慮して計算。[a]期間中半分以上(この場合対象期間が4か月間あるので、2ヶ月以上の在籍が「半分以上」となる)在籍していること。半分以内の在籍は対象外。 [b]B列(5行目についてはA列)において、コース変更月(5行目については入塾月)は期間として換算せず切り捨てる。 [c]対象期間末(2006/5/31)に在籍していない人は、たとえ期間中半分以上在籍していても対象外。 〈例〉1行目の人物;[c]に該当せず図書券受領資格なし。 2行目の人物;資格有り。3月は移動月で切り捨て、4月~5月の2か月在籍のため、図書券1000円。

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

  • ベストアンサー
  • haccyan
  • ベストアンサー率43% (27/62)
回答No.2

こんばんは。 > 下記の計算式を教えてくださいm(^_^)m   →マルかバツかの判定と、ボーナス=図書券の金額○○○円分の算出。    ということですかね。というか、そういう意味としておこたえします。 まず、 > 4月~5月の2か月在籍のため、図書券1000円。と > 半分以内の在籍は対象外。は、矛盾してますね。   →勝手に、対象期間のうち半分未満は対象外。にしときます。 つぎに、 > 5行目については入塾と同時にAコース在籍のため、B列のコース変更年月日は空欄   →この場合、B列は空白ではなくA列と同じ日付をB列に入れとくべきです。    "2006/3/10"が、B列にも入っているものとして考えます。 さらに、 3行目の人物が、なぜマルで、1,500なのか? 5行目の人物と同じく「2006/2/1に入塾と同時にAコース在籍」したが、 2月はコース変更月とみなされ切捨て。 2006/5/31に退塾したが、「退塾した日は在籍とみなす」ため、 3月~5月の3ヶ月間在籍したことになる。   →以上の理由のため、「マルで1,500」である。として考えます。 さらに、 > 図書券を「最大2000円分」、もらえる条件としては、 遅くとも2006/1/31までにコース変更(B→A)していて、 なおかつ、2006/5/31までAコースに在籍していた。 (2006/5/31に退塾した場合を含む)ということになりますね。 さてさて、というかやっとできました。 A列は、人物のNo. B列は、入塾年月日 C列は、コース変更年月日 D列は、退塾年月日 E列は、資格の有無(○or×) F列は、図書券の額 として2行目からデータの場合、 E2=IF((DATEDIF(DATE(YEAR(C2),MONTH(C2)+1,0),IF(D2="","2006/5/31",D2),"m")*IF(D2<DATEVALUE("2006/5/31"),0,1))>=2,"○","×") F2=IF(E2="○",(DATEDIF(DATE(YEAR(C2),MONTH(C2)+1,0),IF(D2="","2006/5/31",D2),"m")*IF(D2<DATEVALUE("2006/5/31"),0,1))*500,0) (自分で作っといていうのもなんだけど、長いな~。) といれて、フィルコピーしてください。 いちおう簡単に確認しながら作りましたけど、 #1さんと同じで、全パターン対応してるかどうかご自分で確認してくださいね。

poisson
質問者

お礼

haccyan様、ありがとうございます!!こんなにご丁寧に詳細に教えてくださって、感動しております。私的な事情で、締め切るのとお礼が遅くなり、大変申し訳ございませんでした。 しかし、とても複雑な式ですね…こんなに複雑な式、よくご存知ですね!!haccyanさんのような方には、朝飯前なのでしょうね。

その他の回答 (2)

回答No.3

まず一番上に1行挿入し、A1のセルに 2006/05/31 を入れて下さい。 3行目D列で○×の判定をする場合には、 =IF(IF(ISBLANK(C3)=1;$A$1;C3)<$A$1;"×";IF(DAYS($A$1;IF(ISBLANK(B3)=1;A3;B3))<61;"×";"○")) 3行目E列で金額を表示する場合には、 =IF(IF(ISBLANK(C3)=1;$A$1;C3)<$A$1;"";IF(DAYS($A$1;IF(ISBLANK(B3)=1;A3;B3))<61;"";IF(DAYS($A$1;IF(ISBLANK(B3)=1;A3;B3))<92;1000;IF(DAYS($A$1;IF(ISBLANK(B3)=1;A3;B3))<120;1500;2000)))) と、入力して下さい。

poisson
質問者

お礼

marlboroman2さん、ありがとうございます。ご回答に対するお礼が遅れて申し訳ございません。とても参考になりました。 いろんなやり方があるのですね。

  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.1

一度に出すと複雑になりそうなので、例えば作業列としてG列~L列を使って 入会年月日 G2 =IF(B2="",A2,B2) 入会翌月日 H2 =DATE(YEAR(G2),MONTH(G2)+1,1) 対象先頭月 I2 =IF(H2<DATEVALUE("2006/2/1"),DATEVALUE("2006/2/1"),H2) 対象終了月 J2 =IF(OR(C2>=DATEVALUE("2006/5/31"),C2=""),DATEVALUE("2006/5/31"),"") 対象月判定 K2 =DATEDIF(I2,J2,"ym") 結果の金額 L2 =CHOOSE(K2,1000,1500,2000) のような感じで下にコピーするとそれっぽくなりました。 全パターンに対応出来てるかはご自分で検証して下さい。 *1行目はタイトル行で2行目からデータの場合です。 *G~J列が数字にしか見えない場合はセルの書式設定で 日付 yyyy/m/d にして下さい。

poisson
質問者

お礼

ごかいとうをありがとうございました。お礼を遅れた事をお詫び致します。 とてもご丁寧に、分かりやすいご回答でした。papayuka様、ありがとうございます。とても感謝しております。

専門家に質問してみよう