いまさら聞けないExcelの使い方講座

【Excel】営業日を指折り数えていない? 休日を考慮した日数を計算するテクニック

「○営業日後」っていつ? Excelで自動計算する方法

 在庫管理やサポートの業務を担当していると「○営業日後」という表現がよく使われますよね。○営業日後の日付を入力する際、1,2,3……、と指折り数えて入力していませんか? 確認のために数えることはありますが、その結果を手入力するのはあまりスマートではありません。日付と曜日がずれてしまったりするミスの原因にもなります。

土・日・祝日を休業日として、2023/4/26(水)の3営業日後は、2023/5/1(月)、5営業日後は、2023/5/8(月)です。このような「○営業日後」の日付を、1,2,3……と数えて入力していませんか?

 「○営業日後」を数えるための関数を覚えておきましょう。WORKDAY.INTL(ワークデイ・インターナショナル)関数です。似た名前の関数として、WORKDAY(ワークデイ)関数もありますが、WORKDAY関数で計算できるのは土・日・祝日を除く営業日のみ。例えば、火曜日だけ休業日の業界や、日曜日と水曜日は休みといったシフトには対応できません。

 WORKDAY関数の機能はWORKDAY.INTL関数で代用できるので、より汎用性の高いWORKDAY.INTL関数の使い方をマスターしておきましょう。

WORKDAY関数とWORKDAY.INTL関数

 WORKDAY関数とWORKDAY.INTL関数は、どちらも[開始日]を基準にして土・日・祝日を除いた「○営業日後」を求める関数です。WORKDAY関数は「土日を除く」、WORKDAY.INTL関数は「任意の曜日を除く」という点が異なります。構文を比べてみましょう。

WORKDAY関数の構文。引数[開始日]を基準として、○営業日後にあたる[日数]を指定します。[祭日]には土日以外に除外したい日付を指定します
WORKDAY.INTL関数の構文。引数[開始日]を基準として、○営業日後にあたる[日数]を指定します。[週末]は除外する曜日に対応する値を指定する。[祭日]には土日以外に除外したい日付を指定します

 [祭日]には、休日扱いにする日付のリストをセル範囲で指定します。省略した場合、WORKDAY関数では土日、WORKDAY.INTL関数では[週末]の値に対応する曜日が除外されます。なお、WORKDAY.INTL関数の引数[週末]を「1」(または省略)とすると、土日が除外されてWORKDAY関数と同じ結果になります。

 例えば、休日扱いにするリストがなく、土日のみ除外した営業日を数えるなら、WORKDAY関数とWORKDAY.INTL関数の数式はほぼ同じです。ここでは、問い合わせの受付日を[開始日]として、回答期限の3営業日後を求めます。

WORKDAY関数で土日を除く3営業日後を求めた例。セルC3に「=WORKDAY(A3,3)」と入力しています(①)
WORKDAY.INTL関数で土日を除く3営業日後を求めた例。セルC3に「=WORKDAY.INTL(A3,3)」と入力しています(②)

 休日扱いにする日付のリストがある場合のWORKDAY関数とWORKDAY.INTL関数の動作も見てみましょう。そのほかに除外する曜日は土日です。WORKDAY.INTL関数の引数[週末]は「1」(または省略)とします。また、数式をコピーすることを考慮して、引数[祭日]に指定するリストのセル範囲(ここではセルE2~E18)は絶対参照にしておきます。

 なお、休日扱いにする日付には、組織の創業記念日や有給休暇など、任意の日付を入力しても構いません。指定するセル範囲は日付のみとしてください。

WORKDAY関数で休日扱いとする日付と土日を除く3営業日後を求めた例。セルC3に「=WORKDAY(A3,3,$E$2:$E$18)」と入力しています(③)
WORKDAY.INTL関数で休日扱いとする日付と土日を除く3営業日後を求めた例。セルC3に「=WORKDAY.INTL(A3,3,$E$2:$E$18)」と入力しています(④)

土日以外を除外するならWORKDAY.INTL関数

 土日以外が休業日の場合、例えば火曜日のみ休業日でほかの曜日は営業日といった場合は、WORKDAY.INTL関数を利用することになります。火曜日を除外する時の[週末]に指定する値は「13」です。休日扱いにするリストの有無による結果の違いに注目してください。

火曜日を除く3営業日後を求めた例。[週末]に指定する値は「13」です。セルC3に「=WORKDAY.INTL(A3,3,13)」と入力しています(⑤)
休日扱いとする日付と火曜日を除く3営業日後を求めた例。[週末]に指定する値は「13」です。セルC3に「=WORKDAY.INTL(A3,3,13,$E$2:$E$18)」と入力しています(⑥)

水曜と日曜を除外したい時は?

 WORKDAY.INTL関数の引数[週末]に指定できる値は「1」~「7」「11」~「17」です。この一覧の組み合わせに該当しない曜日を休業日とする場合はどうしたらいいでしょう? 営業日を「0」、休業日を「1」で表現して「"」で囲んで[週末]に指定します。

 一週間の始まりを月曜とした7桁の値を考えて、休業日に該当する曜日を「1」とします。例えば、水曜と日曜を休業日とする場合は"0010001"となります。

水曜と日曜を除く3営業日後を求めた例。[週末]には「"0010001"」と指定します。値の先頭を月曜として、水曜にあたる3番目と日曜にあたる7番目を「1」とします。セルC3に「=WORKDAY.INTL(A3,3,"0010001",$E$2:$E$18)」と入力しています(⑦)

 フラグのON/OFFのようなイメージで使いやすいかもしれませんね。もちろん土日を除外するのに「"0000011"」と指定しても構いません。ただし残念ながら「"1111111"」は指定できません。

似たような関数名に迷わない

 WORKDAY.INTL関数は、土日以外の曜日も休業日として扱えます。土日固定で休業日扱いとするWORKDAY関数よりも便利ではないでしょうか。また、日付計算に使う関数には、WEEKDAY関数、NETWORKDAYS関数、NETWORKDAYS.INTL関数など、似たような名前のものが多く悩みますよね。まずは「○営業日後」を求めるWORKDAY.INTL関数をぜひマスターしてください。