数式を使って処理をして得た日付が土日や祝日だったときに、その日付ではなくて前日や前々日の平日の日付を表示したい、ということがあります。

作業の期日なのか、振込期日なのか、対象とする日付や目的はさまざまでしょう。

ここでは、WORKDAY 関数を使って処理する例をご紹介します。なお、月末の日付を取得する EOMONTH 関数や WEEKDAY 関数を使って処理をする方法については「土日だったら前の金曜日の日付を表示したいとき (WEEKDAY 関数)」を参照してください。

指定した日付の前や後ろの平日を返す (WORKDAY 関数)

WORKDAY 関数は、開始日として指定した日付の前や後ろの平日のシリアル値を返します。

「平日のシリアル値」とは、土日と (指定があれば) 祝日は除く、という意味です。たとえば、前日のシリアル値が返るように指定したときに、返ってきたシリアル値が土日や祝日だった場合、それは飛ばしてもっと前の平日を返す、ということです。

構文はこちら↓
=WORKDAY(開始日 , 日数 , [祝日])

開始日 (必須) :対象とするシリアル値 (日付) やその日付が格納されているセル指定します。

日数 (必須) :開始日の後ろの平日を返したいときは正の値 (1 や 2) を、開始日の前の平日を返したいときは負の値 (-1 や -2) を指定します。ただし、土日や祝日が除かれます。

[祝日] (省略可能) :祝日や特別な休暇など、稼働日から除外する日付のリストを用意してあるとき、そのリストの範囲を指定します。

たとえば、開始日 が 2023/9/25 だった場合、日数 に -2 から 2 を指定した場合の違いは次の通りです。

2023/9/23 (土、秋分の日)、24 (日) であるため、-1 を指定したときの結果が 1 日前 (前日) の 9/24 ではなく、1 つ前の平日の 9/22 であることがわかります。

下図では、B 列の日付が、土日だった場合は 1 つ (1 日) 前の平日の日付を返す数式を作成しています。ここでは祝日は省略しています。

しかし、2/28 は火曜日なので期日を 1 つ前の 2/27 にする必要がなく、2/28 を期日としたいです。

そのため、開始日に 1 日プラスして、その日付の前日 (-1) とします。

数式を作成したセルを下方向へコピーして、ほかの日付に対応する期日を算出しました。

これを見ると、4/30 と 9/30、12/31 が土日であるため、C 列の期日は 1 つ前の平日が返っていることがわかります。

土日だけでなく、国民の休日などの祝日や組織で決まっている休暇なども除いて処理をする場合は、祝日や休暇をまとめたリストを作成します。

たとえば下図のリストは、「祝日」という名前のテーブルを作成し、[日付] 列に該当日をまとめてあります。2023/2/28 は一般的には祝日ではありませんが、特別休暇とするために加えてある日付です。

数式の第 3 引数に、日付を記述してある範囲 (ここではテーブルなので 祝日[日付] という構造) を指定します。

もしもテーブルではなく、なおかつ数式をコピーする予定がある場合は、日付のセル範囲を絶対参照にしてください。

2023/2/28 が祝日に含まれるため、セル C2 の期日に 1 つ前の平日である 2023/2/27 が返っていることがわかります。


前にしたいのか、後にしたいのかはマイナスするかプラスするかで判断すればよいので、わかりやすいでしょう。

単純に前の平日を返すのではなく、対象となる日付が平日ならそのままにしておきたいから開始日にプラス 1 しなければならない、というところを理解するのも大切なポイントだと思います。

石田 かのこ