今回は、ExcelのNETWORKDAYS関数を使って、2つの日付の間の稼働日数を求める方法と、休日や週末の曜日を指定するコツを紹介します。
この記事は、Excel for Microsoft 365、Excel 2024、Excel 2021、Excel 2019、Excel 2016を前提にしています。関数の書式はWindows版・Mac版で共通です。
NETWORKDAYS関数でできること
土日と指定した休日を除いた日数を数える
NETWORKDAYS関数は、開始日から終了日までの期間について、土曜日と日曜日、そして指定した休日を除いた日数を返す関数です。プロジェクトの作業日数を見積もる、締め切りまでに使える営業日を確認する、月ごとの稼働日数を一覧にする、といった場面で役立ちます。
カレンダーを見ながら手で数えると、祝日の見落としや数え間違いが起こりがちです。関数にしておけば、日付を変えるだけで結果が自動で更新されます。
WORKDAY関数との違い
似た名前の関数にWORKDAY関数があります。役割の違いは次のとおりです。
- NETWORKDAYS:開始日と終了日を指定し、その間の稼働日数を求める。
- WORKDAY:開始日と日数を指定し、何稼働日後の日付を求める。
「何日あるか」を知りたいときはNETWORKDAYS、「いつになるか」を知りたいときはWORKDAY、と覚えておくと使い分けやすくなります。
NETWORKDAYS関数の基本的な書式
書式と引数
書式は次のとおりです。
=NETWORKDAYS(開始日, 終了日, [祭日])
- 開始日(必須):期間の最初の日付です。
- 終了日(必須):期間の最後の日付です。
- 祭日(省略可):稼働日から除外したい日付の一覧です。祝日、会社の休業日などを指定します。
基本的な使い方
たとえば、セルA2に開始日、セルB2に終了日が入っているとします。C2に次のように入力すると、その期間の稼働日数が表示されます。
=NETWORKDAYS(A2,B2)
この場合、土曜日と日曜日だけが除外されます。開始日と終了日が稼働日であれば、その両方の日も日数に含まれる点を押さえておきましょう。たとえば同じ平日を開始日と終了日に指定すると、結果は1になります。
なお、開始日が終了日より後の日付になっていると、結果はマイナスの値になります。思わぬマイナスが出たときは、日付の順番を確認してください。
祝日や休業日を除外する方法
休日一覧を別の範囲に用意する
祝日や年末年始の休業日も除外したい場合は、休日の一覧をセル範囲にまとめて、3つ目の引数に指定します。
- 別のシート(例:「休日」シート)を用意し、A列に休日の日付を1行に1つずつ入力します。
- 稼働日数を求めたいセルに、次のように入力します。
=NETWORKDAYS(A2,B2,休日!$A$2:$A$30)
休日の範囲は絶対参照($付き)にしておくのがコツです。数式を下の行へコピーしても、参照する休日一覧がずれません。
休日一覧はテーブルや名前で管理すると便利
休日一覧は年ごとに追加や修正が発生します。範囲を固定で指定していると、行を追加したときに範囲外の日付が無視されてしまうことがあります。
そこで、休日一覧をテーブルに変換しておくか、範囲に名前(例:「休日一覧」)を付けておく方法がおすすめです。
=NETWORKDAYS(A2,B2,休日一覧)
このように名前で指定すれば数式が読みやすくなり、どの範囲を参照しているかもすぐにわかります。
休日一覧を作るときの注意点
- 休日は日付として入力する。文字列のままだと正しく除外されないことがあります。
- 土曜日や日曜日に当たる祝日は、もともと除外される曜日なので、一覧に含めても二重には数えられません。
- 会社独自の休業日(創立記念日、夏季休業など)も同じ一覧に加えておくと、実際の勤務カレンダーに近い日数になります。
週末の曜日を変えたいときはNETWORKDAYS.INTL関数
土日以外を休みにしたい場合
シフト勤務などで休みが土日ではない場合は、NETWORKDAYS.INTL関数を使います。週末にする曜日を自由に指定できる点が、NETWORKDAYS関数との違いです。
=NETWORKDAYS.INTL(開始日, 終了日, [週末], [休日])
週末番号で指定する
3つ目の引数「週末」には、あらかじめ決められた番号を指定できます。
- 1または省略:土曜日と日曜日
- 2:日曜日と月曜日
- 7:金曜日と土曜日
- 11:日曜日のみ
- 17:土曜日のみ
番号は1から7が連続した2日間、11から17が1日だけの週末を表します。たとえば日曜日だけが休みの職場なら、次のように指定します。
=NETWORKDAYS.INTL(A2,B2,11,休日一覧)
7文字の文字列で自由に指定する
休みの曜日が連続していない場合は、0と1を7文字並べた文字列で指定できます。左から月曜日、火曜日…日曜日の順に対応し、1が休み、0が稼働日です。
たとえば水曜日と日曜日が休みなら、次のように書きます。
=NETWORKDAYS.INTL(A2,B2,”0010001″,休日一覧)
文字列は必ずダブルクォーテーションで囲み、7文字ちょうどにします。文字数が違ったり、0と1以外の文字が含まれていたりすると、#VALUE!エラーになります。
実務で役立つ活用例
月ごとの稼働日数を一覧にする
A列に各月の1日の日付を入力しておけば、EOMONTH関数と組み合わせて月ごとの稼働日数を求められます。
=NETWORKDAYS(A2,EOMONTH(A2,0),休日一覧)
EOMONTH(A2,0)はA2と同じ月の末日を返すため、月初から月末までの稼働日数が計算できます。下の行へコピーすれば、1年分の一覧もすぐに作れます。
今日から締め切りまでの残り稼働日数
開始日にTODAY関数を使うと、今日から締め切りまでの残りの稼働日数を表示できます。
=NETWORKDAYS(TODAY(),B2,休日一覧)
ファイルを開くたびに日付が更新されるため、タスク管理表に入れておくと、残り日数の確認に便利です。
結果がおかしいときのチェックポイント
- 開始日や終了日が文字列になっていないか確認する(左揃えで表示される日付は文字列の可能性があります)。
- 結果のセルが日付の表示形式になっていると、数値が日付のように表示されることがあるので、表示形式を「標準」や「数値」にする。
- 休日一覧の範囲に、追加した日付が含まれているか確認する。
まとめ
ExcelのNETWORKDAYS関数を使うと、土日や祝日を除いた稼働日数を正確に求められます。
- 基本は =NETWORKDAYS(開始日, 終了日, [祭日]) で、開始日と終了日も稼働日なら日数に含まれる。
- 祝日や休業日は一覧を作って3つ目の引数に指定し、絶対参照やテーブル、名前で管理する。
- 土日以外を週末にしたい場合は、NETWORKDAYS.INTL関数の週末番号や7文字の文字列を使う。
- EOMONTH関数やTODAY関数と組み合わせると、月別の稼働日数や残り日数を自動で計算できる。
日程の見積もりや進捗管理で日数を数える機会があれば、手作業の代わりにNETWORKDAYS関数を取り入れてみてください。