• ベストアンサー

EXCELで日付計算

EXCEL2003である期間からある期間までの間の日数を表示させ、さらにその結果から日曜日だけを除いた結果と日曜日と祝日だけを除いた結果の2通りの答えを表示させたいのですがどうすればよいでしょうか? 土日を除く場合はWORKDAYS関数を使用していたのですが...... どなたかわかればご教授お願いします。

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

  • ベストアンサー
  • nag0720
  • ベストアンサー率58% (1093/1860)
回答No.2

#1です。 >ROUNDDOWNやINTとの違いが分からないのですが ROUNDは四捨五入、ROUNDUPは切上げ、ROUNDDOWNは切捨てです。 INTは小数点以下を切捨てる関数ですからROUNDDOWNと似ていますが、ROUNDDOWNは桁数を指定できるところが違います。 さきほどは日曜日の日数の計算式を ROUNDUP((A2-A1+1+WEEKDAY(A1,2))/7,0)-1 と書きましたが、もう少し簡単な計算式がありました。 INT((A2-A1+1+WEEKDAY(A1,3))/7) こちらの方で解説します。 もし開始日が月曜日の場合、 日数が1~6なら日曜日は0 日数が7~13なら日曜日は1 日数が14~20なら日曜日は2 つまり日曜の数は、INT(日数/7) で求められます。 もし開始日が火曜日の場合、開始日を1日前にずらして開始日を月曜日にしても日曜の数は変わりません。 同様に、水曜日の場合は2日前にずらしても、 木曜日の場合は3日前にずらしても、 金曜日の場合は4日前にずらしても、 土曜日の場合は5日前にずらしても、 日曜日の場合は6日前にずらしても日曜の数は変わりません。 したがって、開始日が月曜日ならそのまま、 開始日が火曜日なら日数を1日増やして、 開始日が水曜日なら日数を2日増やして、 ・・・・ 開始日が日曜日なら日数を6日増やして、上記のINT((日数+増加数)/7)を計算すれば日曜の日数が求められます。 WEEKDAY(日付,3)は、月曜:0、火曜:1、・・・日曜:6 を返す関数ですから、 日曜の日数=INT((日数+増加数)/7)=INT((A2-A1+1+WEEKDAY(A1,3))/7)

Not_Pro
質問者

お礼

回答ありがとうございます。無事解決することができました。 本当に助かりました。

その他の回答 (1)

  • nag0720
  • ベストアンサー率58% (1093/1860)
回答No.1

日曜日だけを除く場合は、 A1:開始日、A2:終了日 とすると、開始日から終了日までの日数は、 A2-A1+1 (開始日も終了日も含むとして) その期間の日曜日の日数は、 ROUNDUP((A2-A1+1+WEEKDAY(A1,2))/7,0)-1 以上から、日曜日を除いた日数は A2-A1+1-(ROUNDUP((A2-A1+1+WEEKDAY(A1,2))/7,0)-1) 日曜日と祝日だけを除いた日数は、ちょっと難しいですね。 土日と祝日を除いた日数は、NETWORKDAYS関数で祝日を指定すればできますから、それから祝日でない土曜の日数を引けば計算できます。 しかし、土曜日の日数は上記の日曜日の場合と同じような計算で求められますが、「祝日でない土曜日」となると無理かもしれません。 ユーザー定義関数を作って数えるしかないと思います。

Not_Pro
質問者

お礼

回答ありがとうございます。 無事解決しました。 ですがこの式はROUNDUP関数でないといけないのでしょうか? ROUNDDOWNやINTとの違いが分からないのですが.... WEEKDAYで曜日の数字を出すまでは分かるのですが、なぜ足すのでしょうか? 賢くないので式の意味が分かりません、できれば解説がほしいです。

関連するQ&A