ある日からその日を含んでX日を経過した日をExcelで求めるには「始期となる日+X-1」とすればOKです。
では日曜日を含まないで計算するにはどうしたらよいでしょうか。
たとえば2011年12月8日(木)の7日経過した日は単純に計算すると14日(水)になります。
しかし日曜日を含まない場合、8日(木)の7日経過した日は15日(木)になります。
「木、金、土、月、火、水、木」と日曜日をとばすからです。
この日曜日をとばすという処理が面倒です。
最初に答を示すと次のとおりです。
=A2+INT((B2-1)/6*7)+IF(OR(WEEKDAY(A2)=1,WEEKDAY(A2)+MOD(B2-1,6)>7),1,0)
セルA2 : 期始日
セルB2 : 日数(日曜日を含まない)
ただし期始日が日曜日の場合は1日目は月曜日とします。
経過日数を計算するだけならば、日曜日を除く6日間が経過する度に、日曜日を含む7日間が経過しますので
INT((B2-1)/6*7)
となります。
しかし「端数」を考慮する必要があります。
例えば期始が木曜日で期末が火曜日の場合、期末の前の週の水曜日までは「日数/6*7」でピッタリ計算できますが、その後の前の週の木曜日から期末の火曜日までは調整が必要です。
つまり間に日曜日を挟む場合は経過日数が1日多くなります。
この日曜日を挟むケースを判定するのが
WEEKDAY(A2)+MOD(B2-1;6)>7
の部分です。
また起始が日曜日の場合はいきなり1日経過しますのでこれを判定するのが
WEEKDAY(A2)=1
の部分です。
このどちらかに合致した場合、日曜日を挟むケースと考えて、1増やします。
おまけとしてVBAでユーザー定義関数を作りました。
実はこっちの方が圧倒的に簡単。
num = -1
For i = 1 To nissu
num = num + 1
If Weekday(moto + num) = 1 Then
num = num + 1
End If
Next i
日曜日抜き経過日 = moto + num
End Function
コメント