数式を使って処理をして得た日付が土日だった場合は、その日付ではなくて前日 (前々日) の金曜日を表示したい、ということがあります。

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

ここでは、EOMONTH 関数と WEEKDAY 関数、IFS 関数を使って処理する例をご紹介します。

月末の日付を求める (EOMONTH 関数)

EOMONTH 関数は、開始日として指定した日付を基準に、指定された月数だけ前 / 後の月の最終日に対応するシリアル値を返します。

構文はこちら↓
=EOMONTH(開始日) 

開始日 (必須):基準としたい日付やその日付が格納されているセルを指定します。

 (必須)開始日から起算した月数を指定します。「1」や「2」といった正の数を指定すると起算日より後の日付が、「-1」や「-2」といった負の数を指定すると起算日より前の日付を返します。

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

下図では、A 列の日付の翌月末日を B 列に返す数式を作成しています。

曜日がわかりにくいので表示形式を変更して曜日を表示しています。

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

これを見ると、4/30 と 9/30、12/31 が土日であることがわかります。これを次以降のステップで前の金曜日の日付が返るように処理していきます。

日付に対応する曜日を整数で返す (WEEKDAY 関数)

WEEKDAY 関数は、日付に対応する曜日を整数で返します。たとえば既定では、日曜日は「1」が、土曜日は「7」が返ります。

「"日曜日" だったら」なんていう文字列で判定するのではなく、数字のほうが処理がしやすいために曜日を処理するときによく使われる関数です。

構文はこちら↓
=WEEKDAY(シリアル値 , [週の基準])

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

[週の基準] (省略可能) :戻り値となる整数の種類を数値で指定します。省略すると「1」を指定したときと同じ種類が採用されます。

たとえば、[週の基準] を「1」とする、または省略すると、シリアル値の曜日が「月曜日」だったときに「2」が返ります。

[週の基準] に「1」「2」「3」を指定した場合の違いは次の通りです。

数式を作成するときに種類と対応する整数が表示されるので暗記しなくてもよいです。ただ、種類があるんだな、種類によって開始値などが違うな、ということは知っておきましょう。

下図では、B 列の日付の曜日を C 列に返す数式を作成しています。[週の種類] は「2」としています。

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

土曜日は 6 が、日曜日は 7 が返っていることがわかります。

下図では、C 列の値が 6 だったら B 列の日付の前日 (-1)、7 だったら 前々日 (-2) が返る数式を作っています。

6 でも 7 でもない場合は、B 列の日付を返すために最後の引数で「TRUE , B2」としています。

数式を作成したセルを下方向へコピーします。

B 列の日付が土日だった場合は前の金曜日の日付が返っていることがわかります。

おまけ

B 列と C 列の作業セルを使わないのならこのような数式で同じ処理ができます。先に作業セルを使って作っておいて数式をセル参照になっていたところに数式を貼り付けただけですが、あとから見ると解読はしづらいのでおすすめしません。せめて EOMONTH で求めている翌月末日くらいは参照にしたほうがよいでしょうね。


前日を「-1 したシリアル値」、翌日を「+1 したシリアル値」というように考えられるようになると日付の処理の幅が広がります。

そして、この考え方で処理を進めようとしたときに曜日を整数で扱いたくなるのです。

月末日が祝日だったらどうする?という疑問もでてくるでしょう。

そのお話はコチラでご紹介していますので、ぜひご覧ください。

石田 かのこ