エクセル関数の便利帳 [エクセル関数の便利な使い方を事例を交えてご紹介します] エクセル関数の便利帳 [エクセル関数の便利な使い方を事例を交えてご紹介します]

最近見た
ページ

case
30

WORKDAY関数を使って、〇日営業日を求めよう

日付と時刻2023年6月20日
対応バージョン
  • 365
  • web
  • 2021
  • 2019
  • 2016
  • 2013
  • Web App
  • 2011
  • 2010
  • 2007
  • Starter
WORKDAY関数の使い方を説明しているイメージ

土日・祝日など休業日を除いた〇日前や〇日後の日付を求めたいことはありませんか?WORKDAY関数を使って簡単に求める方法を解説いたします。

WORKDAY関数で土日・祝日を除いた〇日前、〇日後の日付を求めよう!

WORKDAY(ワークデイ)関数は土日・祝日などの休業日を除いた稼働日を求めることができる関数です。 基準の日付から指定した稼動日数だけ前または後の日付を返します。

ここでは、WORKDAY関数の基本的な書式と機能について紹介します。

WORKDAY関数の書式

WORKDAY関数は次のように入力します。

=WORKDAY(開始日, 日数, [祝日])

WORKDAY関数は開始日から、指定した土日祝日を除く日数だけ前または後の日付を求めることができます。

土日だけ除くこともできますが、ここではOR関数でご紹介した祝日の一覧を使用して、土日祝日を除いて実際に求めてみたいと思います。

今回の例では、あらかじめB列に入力された基準となる日付から、A列に2営業日前、C列に3営業日後を求めたいと思います。

セルA4をアクティブにし、[数式]タブの[関数の挿入]をクリックしている画面イメージ

12営業日前を求めたいセルA4をアクティブにし、[数式]タブの[関数の挿入]をクリックします。

[関数の分類]で「日付/時刻」を選択し、[関数名]で「WORKDAY」を選択して、[OK]ボタンをクリックしている画面イメージ

2[関数の分類]で「日付/時刻」を選択し、[関数名]で「WORKDAY」を選択して、[OK]ボタンをクリックします。

[引数の[開始日]に「B4」、[日数]に「ー2」、[祭日]に「syukujitsu!$A$2:$A$1014」を入力して、[OK]ボタンをクリックしている画面イメージ

3[引数の[開始日]に「B4」、[日数]に「ー2」、[祭日]に「syukujitsu!$A$2:$A$1014」を入力して、[OK]ボタンをクリックします。 ※開始日より2営業日前を求めたいのでマイナス2を入れてます。

セルA4のWORKDAY関数の式をコピーし19行目まで貼り付けた画面イメージ

4A4に2営業日前にあたる日付が表示されたと思います。セルA4のWORKDAY関数の式をコピーし19行目まで貼り付けます。

引数の[開始日]に「B4」、[日数]に「3」、[祭日]に「syukujitsu!$A$2:$A$1014」を入力して、[OK]ボタンをクリックしている画面イメージ

5セルC4にセルA4と同じようにWORKDAY関数を入力します。
※C列は3営業日後を求めたいので、[日数]はプラスの3とします。

引数の[開始日]に「B4」、[日数]に「3」、[祭日]に「syukujitsu!$A$2:$A$1014」を入力して、[OK]ボタンをクリックします。

セルC4のWORKDAY関数の式を19行目までコピーしている画面イメージ

6C4に3営業日前にあたる日付が表示されたと思います。セルC4のWORKDAY関数の式をコピーし19行目まで貼り付けます。

A列にB列から2営業日前、C列にB列から3営業日後の日付が表示されたと思います。

ステップアップ:特定の日が土日だったら前の日を求めたい

銀行の引き落とし日、給料日、毎月 日にちが決まっているものでも、土日や祝日だった場合、前の営業日や後の営業日にずれることがありますよね。

ここまでご紹介した方法ですと、意図した結果が得られないと思います。毎月特定日、その日が土日や祝日だった場合、前の営業日や後の営業日を求める方法を解説いたします。

特定日が土日や祝日だった場合、前日を求める式の例:

=WORKDAY(開始日+1, -1, [祝日])

特定日が土日や祝日だった場合、後日を求める式の例:

=WORKDAY(開始日-1, 1, [祝日])

今回の例では、毎月10日が休日だった場合、前の平日と後の平日をそれぞれ求めてみたいと思います。

まずA列に基準となる毎月10日を12か月分入力したいと思います。

セルA4に「2023/4/10」と入力している画面イメージ

1A列日基準となる毎月10日を入力します。
セルA4には「2023/4/10」と入力します。

セルA5には「=EDATE(A4,1)]と入力している画面イメージ

2セルA5には「=EDATE(A4,1)]と入力します。

セルA5の式をコピーし、セルA15まで貼り付けまている画面イメージ

3セルA5の式をコピーし、セルA15まで貼り付けます。

12か月分の10日の一覧ができたと思います。

ここでは分かりやすいように日付の後に曜日を表示し、色分けしておきます。
以下のページを参考に設定してみてください。

次にB列に10日が土日祝日だったら、前の平日を求めたいと思います。

[関数の分類]で「日付/時刻」を選択し、[関数名]で「WORKDAY」を選択して、[OK]ボタンをクリックしている画面イメージ

4セルB4をアクティブにし、[数式]タブの[関数の挿入]をクリックします。

[関数の分類]で「日付/時刻」を選択し、[関数名]で「WORKDAY」を選択して、[OK]ボタンをクリックします。

セルAB4に「=WORKDAY(A4+1,-1,syukujitsu!$A$2:$A$1014)」と入力している画面イメージ

5 引数の[開始日]に「A4+1」、[日数]に「-1」、[祭日]に「syukujitsu!$A$2:$A$1014」と入力します。

(補足)A4+1で11日にし、1営業日前を算出したいのでマイナス1と入力します。そうすることで、10日が平日であれば、常に10日、土日祝日であればその前の平日が返されます。

同じようにC列には10日が土日祝日だったら、後の平日を求めたいと思います。

セルB4に「=WORKDAY(A4+1,-1,syukujitsu!$A$2:$A$1014)」と入力している画面イメージ

6 引数の[開始日]に「A4-1」、[日数]に「1」、[祭日]に「syukujitsu!$A$2:$A$1014」と入力します。

(補足)A4-1で9日にし、1営業日後を算出したいのでプラス1と入力します。そうすることで、10日が平日であれば、常に10日、土日祝日であればその後の平日が返されます。

セルB4とC4の数式をコピーし、15行目まで貼り付けている画面イメージ

7B4とC4の数式をコピーし、15行目まで貼り付けます。

10日が土日祝日の場合、前の平日もしくは後の平日になっていると思います。

ちなみに常に当月の10日を表示したい場合は、Date関数とToday関数を使います。

10日が土日祝日だったら、前の平日を求める場合

開始日に「DATE(Year(Today()),Month(Today()),11)」と入力している画面イメージ

8 引数の[開始日]に「DATE(Year(Today()),Month(Today()),11)」、[日数]に「-1」、[祭日]に「syukujitsu!$A$2:$A$1014」と入力します。

10日が土日祝日だったら、後の平日を求める場合

開始日に「DATE(Year(Today()),Month(Today()),9)」と入力している画面イメージ

9 引数の[開始日]に「DATE(Year(Today()),Month(Today()),9) 」、[日数]に「1」、[祭日]に「syukujitsu!$A$2:$A$1014」と入力します。

更にIF関数を組み合わせると、常に次の10日を求めることができます。

10日が土日祝日だったら、前の平日を求める場合

開始日に「IF(DATE(YEAR(TODAY()),MONTH(TODAY()),10)>=TODAY(),DATE(YEAR(TODAY()),MONTH(TODAY()),11),DATE(YEAR(TODAY()),MONTH(TODAY())+1,11))」と入力している画面イメージ

8引数に次のように入力します。

引数
[開始日]IF(DATE(YEAR(TODAY()),MONTH(TODAY()),10)>=TODAY(),DATE(YEAR(TODAY()),MONTH(TODAY()),11),DATE(YEAR(TODAY()),MONTH(TODAY())+1,11))
[日数]-1
[祭日]syukujitsu!$A$2:$A$1014

10日が土日祝日だったら、後の平日を求める場合

開始日に「IF(DATE(YEAR(TODAY()),MONTH(TODAY()),10)>=TODAY(),DATE(YEAR(TODAY()),MONTH(TODAY()),9),DATE(YEAR(TODAY()),MONTH(TODAY())+1,9))」と入力している画面イメージ

9引数に次のように入力します。

引数
[開始日]IF(DATE(YEAR(TODAY()),MONTH(TODAY()),10)>=TODAY(),DATE(YEAR(TODAY()),MONTH(TODAY()),9),DATE(YEAR(TODAY()),MONTH(TODAY())+1,9)))
[日数]1
[祭日]syukujitsu!$A$2:$A$1014

ステップアップ2:土日以外を週末として求めたい

土日のように別の曜日を週末として求めたい場合はWORKDAY.INTL(ワークデイ・インターナショナル)関数を使います。

WORKDAY.INTL 関数は次のように入力します。

=WORKDAY.INTL(開始日, 日数, [週末], [休日])

週末がどの曜日で何日間あるかを示すパラメーターを引数の[週末]に指定します。 指定したパラメーターに基づいて、開始日から起算して指定した稼働日数だけ前または後の日付を返します。

それぞれの週末番号が示す週末の曜日
週末番号 週末の曜日
1 または省略 土曜日と日曜日
2 日曜日と月曜日
4 火曜日と水曜日
5 水曜日と木曜日
6 木曜日と金曜日
7 金曜日と土曜日
11 日曜日のみ
12 月曜日のみ
13 火曜日のみ
14 水曜日のみ
15 木曜日のみ
16 金曜日のみ
17 土曜日のみ

引数の[週末]以外はWORKDAY関数と同じように入力してみてください。

※頂いた内容についての返信は行っておりません。個人情報の記載はしないようお願いいたします。

おすすめ
ページ

ページTOP