OpenOfficeで期間内の土曜日の回数を求める

懲りもせずに、日付ネタです。

送信者 OpenOffice
B1セルに起算日(開始日)を入力 B2セルに終了日を入力 B3セルに確認したい曜日番号を H1:I7の表から選択して数字を入力すれば回数と一覧を出力します。

数式の構成

●週の数を数える
期間内の土曜日の回数を求めるには、起算日から終了日までが何週間あるかを求めれば分かります。
ここでは、2011年9月23日(金曜)から2011年12月31日(土曜)までの間の土曜日の回数を求めてみます。
ここで言う週の数は、起算日の曜日を週の開始として計算します。

これは、単純に終了日から起算日を引いて得られた日数を7で割った整数部分が答えになります。
上の画像では、B1セルに起算日、B2セルに終了日が入力されていますので、=INT((B2-B1+1)/7)で14が得られます。
●余りの期間を調べる
ただし、期間の日数は、99日なので一週間の日数(7)で割り切れず、余りの日数の中に土曜日が含まれているかもしれません。
調べるための数式の構成要素
起算日:B1
起算日の曜日番号:=WEEKDAY(B1;1)
終了日:B2
確認する曜日番号:B3
期間内の週の数:A5
完成した数式:=IF(IF(B3>=WEEKDAY(B1;1);0;7)+B3-WEEKDAY(B1;1)数式の説明:__1IF(B3>=WEEKDAY(B1;1);0;7)+B3-WEEKDAY(B1;1)・・・
:もしも、確認する曜日番号が、起算日の曜日番号以上なら0、そうでなければ7を確認する曜日番号に加えて、起算日の曜日番号を引く。
これで、一週間終了の翌日から、確認する曜日番号まで何日あるか分かります。

__2MOD((B2-B1+1);7)
:これで一週間の終了翌日から期間の最終日までの日数が分かります。

___3:IF(IF(B3>=WEEKDAY(B1;1);0;7)+B3-WEEKDAY(B1;1)<MOD((B2-B1+1);7);1;0)
一週間の終了翌日から確認する曜日番号の日までの日数が、一週間の終了翌日から期間の最終日よりも大きければ、1を加える。つまり、もう一回土曜日がありますよ、ということです。ここで得られた1、またはゼロと週の数を合計すれば土曜日の数の合計になります。

このサンプルファイルは、calc073.odsをダウンロードしてください。