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

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

カレンダーはなくても稼働日は数えられますが、イメージがわかりやすいように、今回は下記のカレンダーを用意しました。
白い日付=稼働日 なので、こちらを数えたい、ということです。
なお、[祝祭日] 列もなくてもよいのですが、何のお休み?というのがわかるように、列を作って書いてあります。

 用意するモノ

  1. 開始日と終了日
    数式内で “2019/4/1” や “2019/5/31” のように、稼働日を数えたい期間の開始日と終了日を直接指定してもよいのですが、どこかのセルに用意しておくと、数式から参照できるので作りやすいです。

    開始日や終了日は、手入力でその日付をどこかのセルに入れておいてもよいですが、今回の場合は、セル B1 に MIN 関数を使ってカレンダーの [日付] 列の最小値 (すなわち開始日) を、セル B2 に MAX 関数を使って最大値 (すなわち最終日) を取得して表示しています。


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

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

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

わかっていると思いますが・・・念のため

今回の NETWORKDAYS 関数に限った話ではないですが、“日付” を使用する数式では、我々ではなく “Excel が” 日付だと認識できる値を使用しなければなりません。

どんな表示形式でもかまいませんが、カレンダーも祝日の一覧も、日付として利用したいセルには、シリアル値で日付をセルに格納してください、ということです。見た目が日付っぽい、ではダメです。
よくあるのは、「20190401」という数値を入力すること。これだと「20,190,401」(二千十九万四百一) です。

たとえば、今回のカレンダーの「2019/04/01 (月)」のセルは、シリアル値でいうと「43556」。これに表示形式を適用して見た目を変更してあります。

NETWORKDAYS 関数で稼働日を求める

NETWORKDAYS 関数は、[開始日] から [終了日] までの期間に含まれる “稼動日” の日数を返す関数です。
ここでいう “稼働日” とは、土曜日、日曜日、および指定された休日を除く日のことです。

NETWORKDAYS 関数の書式 (構文) は下記です。

NETWORKDAYS(開始日終了日[祭日])

開始日は必須です。期間の初日の日付を指定します。
終了日も必須です。期間の最終日の日付を指定します。
祭日は省略可能です。稼働日から除外したい祝日のリストを用意している場合、その日付が含まれる範囲を指定します。

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

=NETWORKDAYS(B1B2祝日リスト[日付]) 


指定した期間の稼働日が算出されます。


ほんとに?ということで、フィルターしてみました。どうやって [稼働日] に 1 をいれたのかが気になると思いますが、ここでは触れません。


いわゆる平日 (稼働日) は、ほかの関数を使って求めることもできますが、シンプルに「土日と祝祭日はお休み」という前提で稼働日を数えたいのであれば、NETWORKDAYS 関数でよいですね。

[稼働日] にどうやって 1 を入れたのかは、NETWORKDAYS.INTL 関数でご紹介します。

石田 かのこ