経過日数を算出する

経過日数に関する関数を紹介します。
日付・時刻のセル値の実体は...   Excelのセル上での日付・時刻は、実体は「数値(実数)」です。
1900年1月1日が「1」で始まり、1日が「1」の増分なので、1日未満の時間数や時刻は小数値になります。



例えば、新規ブックでどれかのセルに日付として「2024/4/24」などと入力してから、そのセルを「セルの書式設定」で「数値」に変更すると「45406」に変わるのが確認できます。
日付の「セルの書式設定」
この「45406」は「1900/1/1」から「2024/4/24」までの通算日数に当たります。



一方、時間数や時刻は小数として扱われます。例えばセルに「8:00」と入力して数式バーを見ると、「8:00:00」と「秒」の部分が付加されて表示されます。 このセルを「セルの書式設定」で「数値」に変更すると、サンプルには一旦「0」が表示されますが、「小数点以下の桁数」を増やしていくと、
時刻の「セルの書式設定」
このようになります。 「8時間」は「1日の3分の1」なので、10進数では「0.33333....」となるわけです。
処理上では実数であり「秒」未満が保障されないということから、小数点未満のある桁数からゼロが並んで表示されています。

2つの「日付」間の経過日数を算出します。
上のコラムで説明した通り、「日付・時刻」のデータタイプは1日を「1」として増えていくデータタイプなので、単純に差し引いて数値型に表記すれば経過日数が算出されます。
経過日数算出関数サンプル
(画像をクリックすると、このページのサンプルがダウンロードできます)
※開始日/終了日の期間で、「31-1=30」であるように開始日自身が引き算に漏れるので「1」を加えています。

営業日でn日後(n日前)の日付を算出します。
単に暦日で「n日後(n日前)の日付」なら「開始日」に「日数」を加算するだけですが、「営業日」での算出は「休日曜日」や「祝祭日」が絡んできます。



土日祝日を除く「営業日」の計算はよく使うものだと思います。「n営業日前は何日ですか?」などに利用できます。祝日(振替休日含む)と会社固有の休日は「休祭日テーブル」に昇順に並べておいて下さい。
営業日でn日後(n日前)の日付を算出します。
営業日の計算には、「WORKDAY関数」を使います。



関数概略説明
 WORKDAY関数  開始日から起算して、指定された稼動日数だけ前または後の日付に対応する値を返します。稼動日数に当たる稼動日とは、土曜、日曜、および指定された祝日等休日を除く日のことです。
 引数は以下の通りです。
 ① 開始日
 ② 日数(マイナス値は開始日より前の日付となります)
 ③ 休日リスト(省略可、省略すると祝日判定がされません)



3引数が「休日リスト」の配列(セル範囲)となります。土曜日、日曜日は元々算出日数の判断から除外されているので、それ以外に「営業日」判断から除外する日付は「休日リスト」の配列に加えておく必要があります。(画面では「休祭日テーブル」)
このサンプルでは1月2日、1月3日などが「休祭日テーブル」に含まれていますが、このように実際の祝日以外に会社指定休日を含めることもできます。
注意事項としては、「WORKDAY関数」では振替休日の判断は行なわれないので、祝日と日曜日が重なった場合などは「休日リスト」には振替休日となる日付を登録する必要があります。



WORKDAY関数」では「休日リスト」を別途用意しなければなりません。
処理する年度がこの「休日リスト」に登録した期間から外れる場合は、「休祭日テーブル」の作り直しも発生します。 でも、「休日リスト」を別途用意しない状態でも「営業日」の判定を行なう方法はないわけではありません。
これにはVBAを使うので、細かい内容をこのページで解説することはできませんが、関心がある方は「営業日数の計算(ユーザー定義関数)」を用意しましたのでご覧下さい。VBAは利用しますが、作成済みの「ユーザー定義関数」なので組み込み方だけが理解できれば良く、VBAコードの中身の学習は要りません。