質問をいただいたので、平日や土日・祝祭日をカウントしたいときに使える関数についてご紹介します。
今回は開始日から終了日までの間に含まれる稼動日の日数を返す NETWORKDAYS.INTL 関数です。
NETWORKDAYS 関数との違いは、非稼働日が土日とは限らないということ。指定した曜日を非稼働日にできます。

今回は、下図のようなカレンダーの [稼働日] 列に、稼働日なら 1、非稼働日なら 0 が表示されるようにして、稼働日を数えたい!にも、非稼働日を数えたい!にも、対応できるようにしようと思っています。

前提はこちら↓
・火曜日、土曜日、日曜日 を非稼働日とする (お休みってこと)
・ゴールデンウイークなどの一般的な祝祭日を非稼働日とする
・組織で決められた特定の日付 (創立記念日とか、なんちゃら休暇とか、カレンダーにないお休み) は稼働日としない

用意するモノ

  1. 祝日の一覧
    土日はまだしも、いつが祝祭日かなんてことは Excel にはわからないので、一般的な祝祭日や、“組織で決められたお休み” をまとめた一覧を作っておきます。

    今回は、[祝日リスト] というテーブルを作って、[日付] 列に祝日としたい日付を、[祝日] 列に何のお休みかがわかるように名前をまとめてあります。[祝日] 列はなくてもリストとして問題ありませんが、わかりやすいように表示しておきました。
    2019/5/7 は、一般的なカレンダーにはない “組織で決められたお休み” だという想定です。

    なお、一般的には、カレンダーと祝日の一覧は別のシートに作成します。(こんな風に横並びにはしない。理由はいろいろ)
    今回はまとめて見やすいように 1 つのシートにまとめていますが、必ずしもこれが正解ではないです。祝日の一覧はカレンダーや数式を作成するシートとは異なるシートに作ってもらって OK です。


  2. 何曜日を非稼働日とするか
    数式を作りながら考えるのではなく、下表を見ながら、自分がお休みにしたいのは何曜日だ!というのを決めておきましょう。

    数式内で、「土日を非稼働日としたい」とか「火曜日、土曜日、日曜日を非稼働日としたい」という指定をします。
    もちろん日本語で書けないので、下表の「週末文字列」または「週末番号」で指定します。たとえば、「土日を非稼働日としたい」ときは、週末文字列を使って「“0000011”」と指定してもよいし、週末番号を使って「1」と指定してもよいし、省略しても OK です。

    自分が非稼働日としたいのはいつなのか、それを指定するためにはどの週末文字列または週末番号を使うべきなのかをメモしておきましょう。



    表を見ればなんとなくわかると思いますが、週末文字列は、月曜日を先頭に日曜日までを 1 (非稼働日) と 0 (稼働日) で指定します。ということで、「土日を非稼働日としたい」は「“0000011”」です。

NETWORKDAYS.INTL 関数の概要

NETWORKDAYS.INTL (ネットワークデイズ インターナショナル) 関数は、[開始日] から [終了日] までの期間に含まれる “稼動日” の日数を返す関数です。このとき、土日に限らず、何曜日を非稼働日とするのかを指定できるのが特徴です。

NETWORKDAYS.INTL 関数の書式 (構文) は下記です。
NETWORKDAYS.INTL(開始日終了日, [週末], [祭日])

開始日は必須です。期間の初日の日付を指定します。
終了日も必須です。期間の最終日の日付を指定します。
週末は省略可能です。が、ここに大事な「何曜日を休日 (非稼働日) とするのか」を指定します。→ ★週末★ を参照
祭日は省略可能です。稼働日から除外したい祝日のリストを用意している場合、その日付が含まれる範囲を指定します。

稼働日を表示したいセルに数式を作成します。
ここでは、開始日がセル B1終了日がセル B2、週末は土日 (“0000011”) 、祭日が祝日リストの [日付] 列 なので、数式は下記です。(もちろん、祝日の一覧をテーブルにしていない場合は、祭日として E7:E28 のようにセル範囲を指定します。)

=NETWORKDAYS.INTL(B1B2, “0000011”, [祭日]) 

NETWORKDAYS.INTL 関数を使って稼働日のフラグをつける

カレンダーの [稼働日] 列に、稼働日なら 1、非稼働日なら 0 が表示されるようにします。
この列さえあれば、稼働日を数えたいときも、非稼働日を数えたいときも、どっちにも対応できます。

[カレンダー] という名前のテーブルの、[日付] 列の値を開始日と終了日の両方に指定します。(すなわち期間は 1 日)
今回は、火曜日、土曜日、日曜日 を非稼働日としたいので、3 つ目の引数に “0100011” を指定します。
祝日の一覧は祝日リストの [日付] 列です。

ということで数式はこちら。カレンダーはテーブルなので、日付のセルは A7 とは指定せず、@列名 で指定しています。
=NETWORKDAYS.INTL([@日付][@日付], “0100011”, 祝日リスト[日付]) 


稼働日のセルには 1 が、非稼働日のセルには 0 が表示されます。


もちろん祝日リストに含まれる祝祭日も非稼働日なので 0 です。


[稼働日] 列を対象に COUNTIF 関数などでカウントすれば、稼働日や非稼働日の日数を数えられますね。





シンプルに「土日と祝祭日はお休み」という前提で稼働日を数えたいのであれば、NETWORKDAYS 関数でよいのですが、今回のように火曜日もお休み、となると、いつを休日とするのかを指定できる NETWORKDAYS.INTL 関数の出番です。

もちろん土日と祝祭日がお休み、というシンプルなパターンでも NETWORKDAYS.INTL 関数で対応できますから、こちらを覚えておいて損はないかもしれませんね。

石田 かのこ