日曜日を含まない経過日計算

ある日からその日を含んで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でユーザー定義関数を作りました。
実はこっちの方が圧倒的に簡単。

Function 日曜日抜き経過日(moto, nissu)
    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

コメント

タイトルとURLをコピーしました