Chiquilin Site■08.03.07_Excel:祝祭日を計算する

はじめに:国民の祝日について
その1:固定の祝日
その2:変動する祝日
その3:振替休日とその他の休日
ChiquilinSite

はじめに:国民の祝日について

「休日」には「国民の祝日」と「振替休日」の二種類があります。「皇室の慶弔に関する休日」というのがありますが これは臨時の休日なのでその年一回だけのものになります。あと「国民の祝日」にも「固定祝日」と「移動祝日」があります。当然ですが法改正などによって かなりの頻度で内容が変わります。なので「これ」という関数は用意されていません。条件に合わせて自分で計算することになります。下記の計算は2008年3月7日現在の規定に従って計算されています。
ページの一番上へ

その1:固定の祝日

簡単に求められるのは当然 固定の祝日になります。
祝日名
1月1日 元日
2月11日 建国記念の日
4月29日 昭和の日
5月3日 憲法記念日
5月4日 みどりの日
5月5日 こどもの日
8月11日 山の日
11月3日 文化の日
11月23日 勤労感謝の日
12月23日 天皇誕生日
これについては全く問題ないですね。どこかのセルに「年」を入れておけば DATE関数で日付が簡単に求まります。
元旦の場合:
=IF(年セル="","",DATE(年セル,1,1))
ページの一番上へ

その2:変動する祝日

移動祝日については2パターンあります。「?月の第?月曜日」のような形のものと「春分の日・秋分の日」のように天文学上の計算に基づいて年ごとに決定されるものです。
祝日名 計算方法
成人の日 1月第2月曜
春分の日 春分(Wikipedia)
海の日 7月第3月曜
敬老の日 9月第3月曜
秋分の日 秋分(Wikipedia)
体育の日 10月第2月曜
「?月の第?月曜日」については以前に説明ページで書きましたが「第n指定曜日を求める 」を参考にすれば求められと思います。この場合 第何週かは決まっているので 基準にする日は「前月末日」ではなく「指定週の月曜日になる可能性がある最大の日」とします。例えば「成人の日(1月第2月曜)」の場合「1月8日〜1月14日」の間に収まるので 最大の「1月14日」を基準の日にします。
■成人の日
=IF(年セル="","",DATE(年セル,1,14)-WEEKDAY(DATE(年セル,1,14),3)) 
一方 春分・秋分の計算は既に決定している事項から計算するしかありません。規定に基づいた計算式は4年周期で決められているので数式は少し長くなります。2099年までの計算ということで
■春分の日
=IF(年セル="","",DATE(年セル,3,23)-MATCH(年セル,CHOOSE(MOD(年セル,4)+1,
{0,1900,1960,2092},{0,1901,1993},{0,1902,2026},{1903,1927,2059})))
 
■秋分の日
=IF(年セル="","",DATE(年セル,9,25)-MATCH(年セル,CHOOSE(MOD(年セル,4)+1,
{0,1900,2012},{1901,1921,2045},{1902,1950,2078},{1903,1983})))
となります。
ページの一番上へ

その3:振替休日(振り替え休日)と その他の休日

面倒なのが振替休日です。従来の振替休日は「祝日が日曜日の時 翌月曜日を休日とする」決まりでしたが 2005年の祝日法改正(2007年施行)に伴い「翌月曜日」から「翌祝日でない日」となりました。
国民の祝日に関する法律
第三条 第2項
「国民の祝日」が日曜日に当たるときは、その日後において
その日に最も近い「国民の祝日」でない日を休日とする。
 
第三条 第3項
その前日及び翌日が「国民の祝日」である日(「国民の祝日」
でない日に限る。)は、休日とする。
例えば2008年5月6日は 5月4日(みどりの日)の振替休日として火曜日ですが 休日となりました。 また同様に 2009年9月21日と9月23日の間は第3項があてはまって休日となります (08.04.19 追加) 振替休日の計算は 各祝日に対して別枠で計算させた方が早いと思います。下のように表を作っているのなら
祝日一覧表
■E2セル
=IF(B2="","",IF(C2="日",LOOKUP(1,0/(B2+ROW($1:$6)-1=B2:B7),B2:B7)+1,
IF(B2+2=B3,B2+1,"")))
とすれば振替休日が求まります。因みに上や参考ファイルのような作りにしておくと A2:E16セルを選択して オートフィルコピーすれば 年ごとの祝日一覧がコピーで作成できるようになります。
セルを範囲選択してオートフィルコピー
→参考ファイル(036.xls)
振替休日を含めて1列に並べたいという方もいらっしゃるでしょうから一応 抽出用の数式も提示しておきます。
■G1セル:=COUNT(B:B,E:E)
■H1セル:=IF(G$1<ROW(),"",SMALL((B:B,E:E),ROW()))
で H1セルを下方向にオートフィルコピーすれば 振替休日含めて1列に並べられます。もちろん別シートに表示させてもいいと思います (08.04.19 追加)
今更ですが山の日を追加しました。(16.06.12)
ページの一番上へ
ChiquilinSite トップページへ Copyright(C) Chiquilin_site. All Rights Reserved.