総務や経理の仕事では「土日と祝日を除いた稼働日数」を基準に期限を計算する場面が数多くあります。カレンダーを見ながら指折り数えることもできますが、対象件数が増えるほど手間もミスも増えていきます。この計算をワンステップで行ってくれるのがNETWORKDAYS関数です。ただし「祝日リストを用意したのに反映されない」「なぜか1日ズレる」といった、この関数ならではのつまずきが多いのも事実です。この記事では基本の使い方から、実務でありがちなエラーと対処法までまとめて解説します。
NETWORKDAYSの基本構文と「両端含む」仕様
NETWORKDAYSは「開始日」「終了日」、そして任意で「祝日リストのセル範囲」の3つの引数を取り、その間にある土日・祝日を除いた稼働日数(営業日数)を返します。
例:A1セルの契約開始日からB1セルの契約満了日までの稼働日数を、祝日リスト(D列)を除いて求める場合
=NETWORKDAYS(A1, B1, D1:D20)
特に押さえておきたいのが、開始日・終了日がどちらも平日であれば、その両方を稼働日数に含めて数える「両端含む」仕様だという点です。例えば月曜日を開始日、金曜日を終了日にすると、稼働日数は「5日」と計算されます。「開始日の翌日から数え始めたい」というケースでは、この仕様を知らないまま使うと結果が1日多くなるので注意が必要です。
実務でのよくある使用シーン
総務担当者であれば、契約書に定められた「営業日ベースでの提出期限」を起算日から逆算・順算するときにNETWORKDAYSがよく使われます。例えば「契約締結日から起算して5営業日以内に必要書類を提出する」といった条項がある場合、締結日と提出予定日の間の稼働日数をNETWORKDAYSで検算し、期限内に収まっているかをすぐに確認できます。経理担当者であれば、請求書の支払期日を「発行日から起算して30営業日後」のように計算する場面が典型例です。この場合はNETWORKDAYSそのものより、後述するWORKDAY関数と組み合わせて使うことが多くなります。いずれの場合も、自社カレンダー通りの祝日リストを事前に整備しておくことが正確な計算の前提になります。
NETWORKDAYSでよくあるエラー・トラブルと対処法
見た目は同じ日付に見えるのに、計算結果に祝日が反映されないという相談が非常に多いトラブルです。原因のほとんどは、祝日リストのセルが「日付」ではなく「文字列」として入力されていることにあります。
対処法として、該当セルをクリックし、セル内の文字が左寄せになっていないか(=文字列扱いのサイン)を確認してください。文字列になっている場合は、セルを選択して「データ」タブの区切り位置機能を実行するか、DATE関数で日付を作り直して置き換えると、正しく日付データとして認識され祝日が除外されるようになります。
祝日リストに国民の祝日は入れていても、会社独自の夏季休暇や年末年始休暇を追加し忘れているケースです。土日・祝日は除外されていても、これらの休業日は稼働日としてカウントされてしまいます。
対処法は、国民の祝日だけでなく、就業規則で定められた夏季休暇・年末年始休暇・創立記念日などの会社独自の休業日もすべて祝日リストに追加しておくことです。年が変わるたびに祝日リストを更新する運用ルールを決めておくと、この漏れを防げます。
NETWORKDAYSは休日を「土曜・日曜」固定でしか判定できません。そのため、土曜日も出勤日として扱いたい会社や、火曜・水曜が定休日のシフト制の職場でこの関数を使うと、実態と合わない稼働日数が出てしまいます。
対処法として、このようなケースでは次の見出しで紹介するNETWORKDAYS.INTL関数に切り替えてください。休日として扱う曜日をパターン番号で指定できるため、土日以外の休日体系にも対応できます。
類似関数との使い分け
NETWORKDAYSと合わせて覚えておきたいのが、休日パターンを柔軟に指定できるNETWORKDAYS.INTLと、稼働日数から日付そのものを逆算するWORKDAYです。目的に応じて使い分けましょう。
NETWORKDAYS
- 2つの日付の間の稼働日「数」を求める
- 休日は土曜・日曜固定
- 祝日リストは任意で追加指定
NETWORKDAYS.INTL
- 2つの日付の間の稼働日「数」を求める
- 休日の曜日パターンを番号で指定可能
- 土曜のみ休業などの変則勤務に対応
WORKDAY
- 起算日からN稼働日後の「日付」を求める
- 支払期日・提出期限の算出に使用
- NETWORKDAYSとは逆方向の計算
「稼働日数が何日あるか知りたい」ときはNETWORKDAYS(または土日以外の休日体系ならNETWORKDAYS.INTL)、「発行日から30営業日後の日付そのものを知りたい」ときはWORKDAYと覚えておくと、迷わず選べます。
初心者がつまずきやすいポイントとコツ
- 祝日リストを用意せずに使ってしまう。NETWORKDAYSは祝日リストを省略しても動作しますが、その場合は土日しか除外されません。「祝日を除いたはず」と思い込んで結果を信じてしまわないよう、祝日リストの列を必ず用意しましょう。
- 開始日・終了日を両方カウントする仕様を知らずに1日ズレる。月曜開始・金曜終了で「5日」と出るのは正しい仕様です。「開始日を含めたくない」場合は、結果から1を引くなど自分で調整する必要があります。
- 祝日リストの範囲参照を相対参照のままコピーしてしまう。数式を他の行にコピーすると祝日リストの範囲がずれてしまうため、D1:D20のような祝日リストの範囲は$D$1:$D$20のように絶対参照にしておくと安全です。
- 祝日リストのセルは「表示上」ではなく「実体」が日付である必要がある。セルの表示形式を日付に変えただけでは文字列は日付にならないため、DATE関数での入力し直しや区切り位置機能での変換が必要になる点を覚えておきましょう。
まとめ
NETWORKDAYSは、開始日・終了日の間にある土日・祝日を除いた稼働日数を1本の数式で求められる便利な関数です。ただし「祝日リストのセルが文字列になっていて反映されない」「会社独自の休業日を追加し忘れて稼働日数が実際より多く出る」「開始日・終了日を両方カウントする仕様を知らずに1日ズレる」という3つのつまずきが実務では特に多く見られます。土日以外の曜日を休日にしたい場合はNETWORKDAYS.INTL、稼働日数から期限日そのものを逆算したい場合はWORKDAYと、目的に応じて関数を使い分けることも忘れないでください。数式を一から組み立てるのが不安な方は、下のツールで日本語の空欄を埋めるだけで数式を作成できます。
よくある質問
関連記事
- DATEDIF関数で勤続年数・年齢を計算する方法
- YEAR・MONTH・DAY関数の使い方
- SUBTOTAL関数でフィルター後の合計を正しく出す方法
- EDATE・EOMONTH関数で契約更新日・支払期日を自動計算する方法
- WEEKDAY関数で土日・祝日を自動で色分けする方法|条件付き書式との組み合わせとよくある失敗