いきなり答える備忘録

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

(Gスプレッドシート)平日のみカウントする方法

 Googleスプレッドシートで、平日(土日祝日以外)の日数をカウントする方法についてです。
 具体的には期間(開始日~終了日)中に含まれる平日の日付をカウントする方法と、日付のリストのうち平日をカウントする方法の2つを紹介します。

期間(開始日~終了日)中の平日をカウントする方法

 はじめにカウントしようとする内容についてです。
 左側のB3,C3セルに記入されている開始日から終了日までの日付のうち、平日(土日でなく、祝日リスト内の日付でもない日付)をカウントするものとします。

 なにもないところから祝日を判定する機能はないので、このように祝日のリストを用意しておくことが欠かせません。祝日のデータについては内閣府のページが参考になるかと思います。そこにあるCSVファイルを直読みする方法も考えられますが、それについては改めて触れたいと思います。



 カウントは案外簡単にできます。
 次の画像ではG3セルにNETWORKDAYS関数を使った数式を入力して期間内の平日の日数をカウントしています。

 G3セル

=NETWORKDAYS(B3,C3,E3:E5)

 NETWORKDAYS関数はまさにこの目的のための関数です。
 第1引数として期間の開始日を、第2引数として終了日を、第3引数として祝日リストを指定すれば、期間内の平日の日数を出力します。



 NETWORKDAYS関数では土・日曜日以外が平日とみなされますが、平日とする曜日を指定する場合はNETWORKDAYS.INTL関数を利用します。
 次の画像では月・火曜日以外の曜日を平日として平日をカウントしています。

 G3セル

=NETWORKDAYS.INTL(B3,C3,"1100000",E3:E5)

 NETWORKDAYS関数とほぼ同じ関数ですが引数が1つ増えていて、第3引数が平日/休日の指定、第4引数が祝日リストとなります。第3引数についてはこのように指定することで月~日曜日をそれぞれ平日(0)とするか休日(1)とするかを指定できます。

日付データ中の平日をカウントする方法

 こちらではB列が日付のリストとなっており、これらの日付のうち平日(土日でなく、祝日リスト内の日付でもない日付)をカウントするものとします。
 日付が飛び飛びであることに注意してください。また、日付は曜日とともに表示させていますがカウントの手順とは関係ありません。



 この場合もNETWORKDAYS関数を使った数式で平日をカウントできます。

 F3セル

=SUM(ARRAYFORMULA(NETWORKDAYS(B3:B12,B3:B12,D3:D5)))

 ちょっと難しくなります。まず「ARRAYFORMULA(NETWORKDAYS(B3:B12,B3:B12,D3:D5))」の部分ですが、これは各日付が平日かどうかを判定した結果(配列)を得るためのものです。具体的には次の10個の式の結果を一括して取得します。

=NETWORKDAYS(B3,B3,D3:D5)
=NETWORKDAYS(B4,B4,D3:D5)
・・・
=NETWORKDAYS(B12,B12,D3:D5)

 最初の「=NETWORKDAYS(B3,B3,D3:D5)」は「B3セルの日付からB3セルの日付まで(1日間)に平日がいくつあるか」という意味になり、この日は平日ですので結果は1になります。同様に「=NETWORKDAYS(B4,B4,D3:D5)」の結果は、B4セルの日付が平日でないので0になります。これらの10個の結果を最後にSUM関数で合計すれば平日の日数が求められるというわけです。
 ARRAYFORMULAを忘れると誤った結果になります(0か1にしかならない)ので注意してください。



 最初の例と同様にNETWORKDAYS.INTL関数を使えば平日とする曜日の指定が可能です。

 F3セル

=SUM(ARRAYFORMULA(NETWORKDAYS.INTL(B3:B12,B3:B12,"1100000",D3:D5)))

 


 ところで、SUM関数の代わりにSUMPRODUCT関数を使えばARRAYFORMULAを省略できます。
 どちらがいいとも言えませんが参考まで。

 F3セル

=SUMPRODUCT(NETWORKDAYS(B3:B12,B3:B12,D3:D5))