土日・祝祭日を考慮した月末日 WORKDAY関数

http://q.hatena.ne.jp/1172386603 にコメントで
=WORKDAY(DATE(YEAR(TODAY()),MONTH(TODAY())+1,1),-1,$E$1:$E$4)
とコメントしましたが、解説を日記で書いておきます。自分の備忘録がわり(^^;)
要件は満たしていると思うのですが... 間違いがあればコメント頂ければ、幸いです。m(_^_)m
これは =WORKDAY(翌月1日 , -1 {土日・祝祭日を除いた1日前} , $E$1:$E$4 {祝祭日の一覧}) という意味です。


まず、基本的な知識としてエクセルは日付・時刻データをシリアル値で持っていること
日時データについて(インストラクターのネタ帳)
つまり、翌日は+1、前日は-1すれば求められし、表示形式を数字にすると実態がよくわかります。


単純に月末日を求める方法は EOMONTH関数DATE関数 を使います。


今回は、土日や祝祭日にはその前日または前々日とさかのぼりますので..
そのような際に、便利な関数 WORKDAY関数 を使います。(事前に分析ツールのアドイン登録が必要です。)

  • 前準備として、E1セルから下に月末に係る祝祭日・休日の一覧を準備します。
月末日に係る祝祭日・休日は4月29日と
年末は官庁に準じて12月29日〜31日からとします。
なので、毎年の 4/29 , 12/29 , 12/30 , 12/31 でしょうか?
けれど、毎年この日付を設定するのは大変なので..
E1 =DATE(YEAR(TODAY()),4,29)
E2 =DATE(YEAR(TODAY()),12,29)
E3 =DATE(YEAR(TODAY()),12,30)
E4 =DATE(YEAR(TODAY()),12,31)
とすると、毎年この日付を設定し直す必要がなくなります。
これ以外の休日があるなら E5 より下に追加して、
WORKDAY関数の $E$1:$E$4 の範囲を広げます。


数式を分解して解説すると

  • 翌月1日の日付をシリアル値で求めています。
=DATE(YEAR(TODAY()),MONTH(TODAY())+1,1)
  • 次にWORKDAY関数で、翌月1日-1 日後(つまり前日)で土日・祝祭日・休日を除く日を求めます。
=WORKDAY(DATE(YEAR(TODAY()),MONTH(TODAY())+1,1),-1,$E$1:$E$4)


WORKDAY関数は、この説明をみてください。
土・日を除く「3営業日後」の日付を求める<“平日”だけを探すWORKDAY関数の活用>
○営業日後の日付−WORKDAY関数


2014年12月は、12月29日が月曜日なので、2014年12月26日になることは確認しました。


(2007/2/27追記)
エクセル技道場
最終営業日」でよく似たことがかかれていることに気づきました。
違いはEOMONTH関数を使っていることですが、関連したTipsが前後にあるので、一緒にみるとわかりやすいかもしれません。