いきなり答える備忘録

Google Workspace・Microsoft 365・LibreOfficeなどに関するメモ

(Excel)初日を含む日数計算の方法

 Excelで2つの日付の間の日数を計算する際に、初日を含める方法についてです。
 DATEDIFなどの関数を使うと初日が算入されない結果となるので、引数を少し変更する必要があります。

  • 単純な引き算、DATEDIF関数、DAYS関数で日数を求めると初日を含まない日数となりますが、引数の値を調整すれば初日を含めた結果が得られます。
  • NETWORKDAYS関数、NETWORKDAYS.INTL関数では初日を含む日数を求められます。ただし基本的に土・日曜日の日数が含まれません。

引き算/DATEDIF関数/DAYS関数の場合

 次の画像ではD3セルに「=C3-B3」と入力することで、B3,C3セルの2つの日付の間の日数を求めています。
 このように単純な引き算で日数を求められますが、2つの値の日付を差異を求めるものとなっているので結果は初日(開始日)を含まない日数(9)となります。


 そこで式に1を加えて「=C3-B3+1」とすれば初日を含む日数(10)が得られます。


 次の画像はDATEDIF関数を用いた例です。
 この関数では2つの日付のほか第3引数として「"D"」を指定ことで日数を求められますが、(引き算の例と同様に)初日を含まない日数になるので、引数をわずかに変えて初日を含む日数を得ています。

 D3セル

=DATEDIF(B3-1,C3,"D")

 開始日から1を引く、つまり開始日の前日を引数とすることで1日増えた日数を得ています。
 なお「=DATEDIF(B3,C3+1,"D")」としても同じ結果になります(終了日の方を1日延ばす)。


 ところで「=DATEDIF(B3,C3,"D")+1」としてもよさそうですが、そうするとセルの書式が変わってしまい日付が表示されます(この辺りはバージョンにより異なるかもしれません)。
 書式を「標準」に戻せば正しい数値(10)になりますが、その分の手間が増えます。これは次のDAYS関数についても同様です。


 次の画像はDAYS関数の例です。
 この関数も2つの日付を指定するだけだと初日を含まない日数になりますので、引数をわずかに変えて初日を含む日数を得ています。

 D3セル

=DAYS(C3,B3-1)

 DATEDIF関数の例と同じく開始日の前日を引数として指定しています。ただしDAYS関数の場合は第1引数として開始日を、第2引数として終了日を指定する必要があるので間違えやすいです。
 また、「=DAYS(C3+1,B3)」としても同じ結果になります。

NETWORKDAYS/NETWORKDAYS.INTL関数の場合

 上記のほかに日付を数える関数としてはNETWORKDAYS関数があります。
 これは期間中の稼働日数をカウントするための関数ですので、2つの日付を指定するだけで初日を含めた日数が得られます。
 ただし土日(及び第3引数を指定した場合はその日付)の日数が含まれないので注意する必要があります。

 D3セル

=NETWORKDAYS(B3,C3)


 NETWORKDAYS.INTL関数の場合も同様で、初日を含めた日数が得られます。
 ただしこちらも土日(及び第3引数で休日指定した曜日と第4引数で指定した日付)の日数が含まれません。

 D3セル

=NETWORKDAYS.INTL(B3,C3)


 ただし、このNETWORKDAYS.INTL関数の場合は第3引数を使って各曜日が平日か休日かを指定できるので、「"0000000"」とする(つまりすべての曜日を平日と指定する)ことで、土日を含む全日数を求めることができます。

 D3セル

=NETWORKDAYS.INTL(B3,C3,"0000000")

 第3引数で月~日曜日をそれぞれカウント対象とする(0=平日)かしない(1=休日)かを指定できます。
 このように全部平日として指定するなら他の方法で済むので実用性はありませんが、特定の曜日をカウントしない場合には非常に便利な関数です。