目次
このチュートリアルでは、ExcelのNETWORKDAYS関数とWORKDAY関数を使用して、カスタム週末パラメータと休日を含む勤務日を計算する方法について説明します。
Microsoft Excel には、平日を計算するために特別に設計された WORKDAY と NETWORKDAYS という 2 つの関数があります。
があります。 ワークデイ 関数は、未来または過去の N 営業日の日付を返すので、指定した日付に営業日を加算したり減算したりするのに使用します。
を使用しています。 ネットワ-クデー 関数を使用すると、指定した2つの日付の間の勤務日数を計算することができます。
Excel 2010以降では、上記の関数をより強力に改良したWORKDAY.INTLとNETWORKDAYS.INTLが用意されており、どの日が何日目の週末であるかを定義することができます。
それでは、それぞれの関数を詳しく見て、Excelのワークシートでどのように労働日数を計算できるかを見てみましょう。
エクセルWORKDAY関数
ExcelのWORKDAY関数は、開始日から指定された営業日数前または前の日付を返します。 週末や指定された休日は除かれます。
WORKDAY機能は、土曜日と日曜日を週末とする標準的な作業カレンダーに基づいて、作業日、マイルストーン、期日を計算するために使用されます。
WORKDAYは、Excel2007~365の組み込み関数です。 それ以前のバージョンでは、分析ToolPakを有効にする必要があります。
ExcelでWORKDAYを使用する場合、以下の引数を入力する必要があります。
WORKDAY(開始日, 日数, [休日])最初の2つの引数は必須で、最後の1つはオプションである。
- 開始日 - 平日のカウントを開始する日付を指定します。
- 日数 - start_date に加算/減算する勤務日数。 正数なら未来の日付、負数なら過去の日付が返されます。
- ホリデー - 営業日としてカウントしない日付のリスト (オプション)。 計算から除外したい日付を含むセル範囲、あるいは日付を表す通し番号の配列定数のいずれかを指定します。
基本が分かったところで、ExcelのワークシートでWORKDAY関数をどのように使うか見てみましょう。
WORKDAYを使用して、日付に営業日を加算/減算する方法
エクセルで勤務日数を計算するには、以下の簡単なルールに従います。
- への つける には正の数値を入力してください。 日間 WORKDAY式の引数を指定します。
- への 牽く には負の数を使用します。 日間 の議論になります。
セルA2に開始日、セルB2:B5に休日のリストがあり、未来と過去の30日の日付を調べたいとします。 以下の数式を使用することができます。
B2:B5で休日を除く30労働日を開始日に追加する場合。
=workday(a2, 30, b2:b5)
B2:B5の休日を除く、開始日から30労働日を減算すること。
=workday(a2, -30, b2:b5)
をもとに平日を計算すること。 現在日付 の場合、開始日としてTODAY()関数を使用します。
今日の日付に30労働日を追加する場合。
=workday(today(), 30)
今日の日付から30営業日分を引く場合。
=workday(today(), -30)
開始日を直接数式で指定する場合は、DATE関数を使用します。
=workday(date(2015,5,6), 30)
次のスクリーンショットは、これらすべての結果と、さらにいくつかのWORKDAYの計算式を示したものです。
そして当然ながら、開始日に加算/減算する勤務日数をどこかのセルに入力し、計算式の中でそのセルを参照することができます。 たとえば、以下のように。
=workday(a2, c2)
A2は開始日、C2は開始日から遅れた(負の数)または進んだ(正の数)非週末日数で、除外する休日はない。
ヒント Excel 365 および 2021 では、WORKDAY と SEQUENCE を組み合わせて使用することで、一連の営業日を生成することができます。
Excel WORKDAY.INTL関数
WORKDAY.INTLは、WORKDAY関数をより強力に改良したもので、次のように動作します。 カスタムウィークエンドパラメーター WORKDAYと同様に、指定した勤務日の未来または過去の日付を返しますが、どの曜日を週末とみなすかを指定することができます。
WORKDAY.INTL関数は、Excel2010から導入されたため、それ以前のExcelバージョンでは使用できません。
Excel WORKDAY.INTL関数のシンタックスは以下の通りです。
WORKDAY.INTL(開始日、日数、[週末]、[休日])最初の2つの引数は必須で、WORKDAYと同じようなものです。
開始日 - は、最初の日付です。
日数 - 開始日の前(負の値)または後(正の値)の営業日数。 日間
が10進数で与えられた場合は,整数に切り捨てられる。
最後の2つの引数は任意である。
ウィークエンド - は、週末としてカウントする平日を指定します。 これは、以下に示すように、数字または文字列のいずれかとなります。
番号 | 週末 |
1 または省略 | 土曜日、日曜日 |
2 | 日曜日、月曜日 |
3 | 月、火 |
4 | 火・水 |
5 | 水・木 |
6 | 木、金 |
7 | 金曜日、土曜日 |
11 | 日曜日のみ |
12 | 月曜日のみ |
13 | 火曜日のみ |
14 | 水曜日のみ |
15 | 木曜日のみ |
16 | 金曜日のみ |
17 | 土曜日のみ |
週末の文字列 - は、月曜日から始まる7つの曜日を表す7つの0と1の列です。 1は非稼働日、0は出勤日を表します。 例えば
- "0000011" - 土曜日と日曜日は週末です。
- "1000001" - 月曜日と日曜日は週末です。
一見、週末の文字列は余計に見えるかもしれませんが、個人的にはこの方法の方が、数字を覚えることなく、その場で週末の文字列を作れるので好きです。
ホリデー - 営業日カレンダーから除外したい日付のリスト (オプション)。 これは、日付を含むセルの範囲、あるいはこれらの日付を表すシリアル値の配列定数です。
ExcelでWORKDAY.INTLを使用する - 計算式の例
さて、ここまで説明した理論の大部分は、かなり複雑でわかりにくいものですが、数式を駆使すると、とても簡単になります。
セル A2 に開始日、セル A5:A8 に祝日のリストがあるデータセットで、カスタム週末を含む勤務日を計算してみましょう。
への つける 開始日まで30日、金曜日と土曜日は土日としてカウントし、A5:A8の祝日は除く。
=workday.intl(a2, 30, 7, a5:a8)
または
=workday.intl(a2, 30, "0000110", a5:a8)
への 牽く 開始日から30営業日、日曜・月曜は土日としてカウント、A5:A8の祝日は除く。
=workday.intl(a2, -30, 2, a5:a8)
または
=workday.intl(a2, -30, "1000001", a5:a8)
10労働日を追加する場合 現在日付 日曜日が唯一の週末で、祝日はありません。
=workday.intl(today(), 10, 11)
または
=workday.intl(a2, 10, "0000001")
Excelのシートでは、数式は次のようなものになります。
ExcelのWORKDAY関数、WORKDAY.INTL関数は、いずれも日付を表す通し番号を返します。 これらの数字を日付として表示するには、数字のあるセルを選択して、Ctrl+1キーを押しながら セルのフォーマット ダイアログで 番号 タブで、以下を選択します。 日付 において カテゴリー 詳細な手順については、「Excelで日付の書式を変更する方法」をご覧ください。
ExcelのWORKDAYとWORKDAY.INTLのエラーについて
ExcelのWORKDAYやWORKDAY.INTLの数式がエラーを返す場合、その原因は以下のいずれかにあると思われます。
#NUM! のどちらかの場合、エラーが発生します。
- を組み合わせたもの。
開始日
と日間
の引数が無効な日付になる、あるいは 週末
WORKDAY.INTL関数の引数が無効である。
#VALUE! のどちらかの場合、エラーが発生します。
開始日
のいずれかの値、またはバカンス
が有効な日付でない場合、または日間
の引数が非数値の場合。
エクセル NETWORKDAYS関数
ExcelのNETWORKDAYS関数は、2つの日付の間の、週末と、オプションで指定した休日を除いた勤務日数を返します。
Excel NETWORKDAYSの構文は、直感的で覚えやすい。
NETWORKDAYS(開始日, 終了日, [休日])最初の2つの引数は義務で、3つ目は任意である。
- 開始日 - 営業日のカウントを開始する最初の日。
- 終了日 - 勤務日数をカウントしている期間の終了日。
開始日と終了日の両方が、返される勤務日数にカウントされます。
- ホリデー - 労働日としてカウントされるべきでない祝日のリスト(オプション)。
ExcelでNETWORKDAYSを使う方法 - 計算式例
例えば、セル A2:A5 に祝日のリストがあり、B 列に開始日、C 列に終了日があり、これらの日付の間に何日間の勤務があるかを知りたいとします。 適切な NETWORKDAYS 式は簡単に分かります。
=networkdays(b2, c2, $a$2:$a$5)
ExcelのNETWORKDAYS関数は、開始日が終了日よりも小さい場合は正の値を返し、終了日が開始日よりも新しい場合は負の値を返すことに注意してください(5行目のように)。
Excel NETWORKDAYS.INTL関数
NETWORKDAYSと同様に、ExcelのNETWORKDAYS.INTL関数は、2つの日付間の平日数を計算しますが、週末としてカウントする日を指定することができます。
NETWORKDAYS.INTL関数の構文はNETWORKDAYSのものと非常に似ていますが、[weekend]パラメータが追加されており、どの曜日を週末としてカウントするかを指定することができます。
NETWORKDAYS.INTL( start_date, end_date, [週末], [休日] ) があります。 週末
引数には数値か文字列を指定できます。 数値と週末の文字列は 週末
WORKDAY.INTL関数のパラメータで指定します。
NETWORKDAYS.INTL関数は、Excel 365 - 2010で利用可能です。
ExcelでNETWORKDAYS.INTLを使用する - 計算式の例
先ほどの日付のリストを使って、日曜日が唯一の週末である2つの日付の間の勤務日数を計算してみましょう。 この場合、11番を 週末
または、NETWORKDAYS.INTLの引数に0を6個と1を1個組み合わせた文字列("0000001")を指定します。
=networkdays.intl(b2, c2, 11, $a$2:$a$5)
または
=networkdays.intl(b2, c2, "0000001", $a$2:$a$5)
以下のスクリーンショットは、両計算式が全く同じ結果を返すことを証明しています。
Excelで勤務日を強調表示する方法
WORKDAY関数とWORKDAY.INTL関数を使用すると、Excelワークシートで勤務日を計算できるだけでなく、ビジネスロジックに必要なハイライト表示もできます。 このためには、WORKDAYまたはWORKDAY.INTL数式で条件付き書式ルールを作成する必要があります。
例えば、B列の日付のリストの中で、セルA2:A3の2つの祝日を除いて、今日の日付から15営業日以内にある未来の日付だけをハイライトしてみましょう。 最もわかりやすい数式として、次のようなものが思い浮かびます。
=AND($B2>TODAY(), $B2<=WORKDAY(TODAY(), 15, $A$2:$A$3))
論理テストの最初の部分では、過去の日付を切り捨てます。 つまり、ある日付が今日以上であるかどうかをチェックします。 $B2>TODAY() そして2番目の部分では、ある日付が週末と特定の祝日を除いて、15週間以上先の平日であるかどうかをチェックします。 B2<=WORKDAY(TODAY(), 15, $A$2:$A$3)
この式は正しいように見えますが、この式に基づいてルールを作成すると、間違った日付をハイライトしていることに気づきます。
なぜそうなるのかを考えてみましょう。 誰かが結論づけるように、問題はWORKDAY関数にあるのではありません。 関数は正しいのですが・・・実際に何をしているのでしょうか? セルA2:A3内の週末(土日)と休日を除いて、今から15営業日後の日付を返しているのです。
では、この数式に基づくルールはどうなるのでしょうか? 今日以上かつWORKDAY関数が返す日付未満のすべての日付をハイライトします。 ほら、すべての日付です!週末や休日を色付けしたくない場合は、Excelに明示的に指示する必要があります。 そこで、この数式にさらに二つの条件を追加しています。
- 週末を除外するWEEKDAY関数:WEEKDAY($B2, 2)<6
- 休日を除外するCOUNTIF関数:COUNTIF($A$2:$A$3, $B2)=0
以下のスクリーンショットに示すように、改良された数式は完全に動作します。
=AND($B2>TODAY(), $B2<=WORKDAY(TODAY(), 15, $A$2:$A$3), COUNTIF($A$2:$A$3, $B2)=0, WEEKDAY($B2, 2)<6)
このように、WORKDAY関数とWORKDAY.INTL関数を使えば、Excelで簡単に勤務日を計算できます。 もちろん、実際に使う数式はもっと高度なものになるでしょうが、基本を知っていれば、ごく一部の必須事項を覚えるだけで、あとは派生していくので非常に便利です。 それでは、次週のブログもよろしくお願いします。