Home » Excel(エクセル)の関数・数式の使い方 » 日付の処理・計算 » 土日を除外した月末最終営業日の前日を求めたい

土日を除外した月末最終営業日の前日を求めたい

対象:Excel97, Excel2000, Excel2002, Excel2003, Excel2007

土日を除いた月末最終営業日を取得する方法をご紹介してきました。

EOMONTH関数とWEEKDAY関数を使った方法と、EOMONTH関数を使わずにDATE関数・YEAR関数・MONTH関数を使った方法です。

似たようなことですが、
「土曜日と日曜日を除外して、月末の最終営業日の、前日を求めるにはどうしたらいいのでしょうか?」
といったご質問をいただくこともあります。

▼操作方法:土日を除外した月末の最終営業日の前日を求める
※A1セルに日付を入力したときに、A6セルに月末最終営業日の前日を表示する例

A6セルに
「=IF(OR(WEEKDAY(DATE(YEAR(A1), MONTH(A1)+1, 0), 2)=7, WEEKDAY(DATE(YEAR(A1), MONTH(A1)+1, 0), 2)=1), DATE(YEAR(A1), MONTH(A1)+1, -3), IF(WEEKDAY(DATE(YEAR(A1), MONTH(A1)+1, 0), 2)=6, DATE(YEAR(A1), MONTH(A1)+1, -2), DATE(YEAR(A1), MONTH(A1)+1, -1)))」
という数式を入力する

EOMONTH関数を使わずにDATE関数・YEAR関数・MONTH関数を使って、土日を除外した最終営業日を取得する場合の数式が、
「=IF(WEEKDAY(DATE(YEAR(A1), MONTH(A1)+1, 0), 2)=7, DATE(YEAR(A1), MONTH(A1)+1, -2), IF(WEEKDAY(DATE(YEAR(A1), MONTH(A1)+1, 0), 2)=6, DATE(YEAR(A1), MONTH(A1)+1, -1), DATE(YEAR(A1), MONTH(A1)+1, 0)))」
でしたが、土日を除外した前日になると、
「=IF(OR(WEEKDAY(DATE(YEAR(A1), MONTH(A1)+1, 0), 2)=7, WEEKDAY(DATE(YEAR(A1), MONTH(A1)+1, 0), 2)=1), DATE(YEAR(A1), MONTH(A1)+1, -3), IF(WEEKDAY(DATE(YEAR(A1), MONTH(A1)+1, 0), 2)=6, DATE(YEAR(A1), MONTH(A1)+1, -2), DATE(YEAR(A1), MONTH(A1)+1, -1)))」
と、更に長い数式になってしまいます。

↑これを見た時点で、Excelの数式に慣れてない方はイヤになっちゃうでしょうけど。。

[スポンサードリンク]

計算式の一部を外に出せば、どんなロジックなのか理解しやすくなります。

▼操作手順:土日を除外した月末の最終営業日の前日を求める
※A1セルに日付を入力したときに、A2セルに月末日を表示し、A6セルに月末最終営業日の前日を表示する例

A2セルに
「=DATE(YEAR(A1), MONTH(A1)+1, 0」
という数式を入力
 ↓
A6セルに
「=IF(OR(WEEKDAY(A2, 2)=7, WEEKDAY(A2, 2)=1), A2-3, IF(WEEKDAY(A2, 2)=6, A2-2,A2-1))」

という数式を入力

土日を除外した最終営業日を求めたいときの数式が、
「=IF(WEEKDAY(A2, 2)=7, A2-2, IF(WEEKDAY(A2, 2)=6, A2-1, A2))」
でしたが、これが
「=IF(OR(WEEKDAY(A2, 2)=7, WEEKDAY(A2, 2)=1), A2-3, IF(WEEKDAY(A2, 2)=6, A2-2, A2-1))」
になるわけです。土日を除いた最終営業日の前日になると。

これくらいの数式でも、見慣れていないとイヤになるかもしれませんが、途中に改行を入れたりインデントをすると、理解しやすくなるのではないでしょうか。

土日を除外した最終営業日は、
=IF(WEEKDAY(A2, 2)=7,
  A2-2,
  IF(WEEKDAY(A2, 2)=6,
   A2-1,
   A2))
土日を除外した最終営業日の前日は、
=IF(OR(WEEKDAY(A2, 2)=7,WEEKDAY(A2, 2)=1),
  A2-3,
  IF(WEEKDAY(A2, 2)=6,
   A2-2,
   A2-1))
です。

土日を除外した最終営業日のときと違うのは、
最初の判別が
「OR(WEEKDAY(A2, 2)=7,WEEKDAY(A2, 2)=1」
となっていることと、
最終営業日の前日なので、実際の日付表示部分が
「A2-3」「A2-2」「A2-1」
となっていること「だけ」です。


月末日の曜日によって、土日を除いた月末最終営業日の前日は変わってきます。

月末日が日曜日ならば、最終営業日は金曜日でその前日の木曜日が、土日を除いた月末最終営業日の前日です。最終営業日の前日は、月末日の3日前ということになります。

月末日が月曜日のときは、最終営業日はその月曜日ですが、土日を除いた月末最終営業日の前日は金曜日になります。これも月末日から見ると3日前です。

月末日が日曜と月曜のときは、その3日前が月末最終営業日の前日に該当するわけです。
これが、
「=IF(OR(WEEKDAY(A2, 2)=7, WEEKDAY(A2, 2)=1), A2-3, IF(WEEKDAY(A2, 2)=6, A2-2, A2-1))」
という数式のはじめの
「=IF(OR(WEEKDAY(A2, 2)=7, WEEKDAY(A2, 2)=1), A2-3」
部分の意味しているところです。

月末日が日曜日という論理式「WEEKDAY(A2, 2)=7」と、月末日が月曜日という論理式「WEEKDAY(A2, 2)=1」を、OR関数を使って判定して、いずれかが該当したときに月末日から3日前の日付を取得「A2-3」しています。


月末日が土曜日ならば、最終営業日は前日の金曜日、最終営業日の前日は月末日の2日前になります。

これが、
「=IF(OR(WEEKDAY(A2, 2)=7, WEEKDAY(A2, 2)=1), A2-3, IF(WEEKDAY(A2, 2)=6, A2-2, A2-1))」
という数式の
「IF(WEEKDAY(A2, 2)=6, A2-2」
部分の意味しているところです。


その他の曜日(火・水・木・金)のときは、月末日の1日前が、土日を除いた月末最終営業日の前日になります。
これが
「=IF(OR(WEEKDAY(A2, 2)=7, WEEKDAY(A2, 2)=1), A2-3, IF(WEEKDAY(A2, 2)=6, A2-2, A2-1))」
という数式の最後の
「A2-1」
部分の意味しているところです。

一つにまとめた
「=IF(OR(WEEKDAY(DATE(YEAR(A1), MONTH(A1)+1, 0), 2)=7, WEEKDAY(DATE(YEAR(A1), MONTH(A1)+1, 0), 2)=1), DATE(YEAR(A1), MONTH(A1)+1, -3), IF(WEEKDAY(DATE(YEAR(A1), MONTH(A1)+1, 0), 2)=6, DATE(YEAR(A1), MONTH(A1)+1, -2), DATE(YEAR(A1), MONTH(A1)+1, -1)))」
という数式でも、このロジックはまったく同じです。

▼サンプルファイル(003181.xls 60KByte)ダウンロード

サンプルファイルの
「土日を除外した月末最終営業日の前日A」シートには一つの数式にした例、「土日を除外した月末最終営業日の前日B」シートには数式の一部を外に出した例が、作成してあります。

A1セルの値を変更して、A6・E2:E10セルの値がどう変化するか、ご確認ください。

関連語句
月の最終日を示す

[スポンサードリンク]

Home » Excel(エクセル)の関数・数式の使い方 » 日付の処理・計算 » 土日を除外した月末最終営業日の前日を求めたい

「日付の処理・計算」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.