対象:Excel97,Excel2000,Excel2002,Excel2003,Excel2007「来年の成人の日が何日なのかを調べるにはどうしたらいいのでしょう?」といったご質問をいただくことがあります。1999年まで成人の日は1月15日に固定されていましたが、ハッピーマンデー制度導入によって2000年からは1月の第2月曜日と年によって変化するようになっています。毎年日付が変わるため、先のようなご質問をいただくことになるわけです。[スポンサードリンク]1月の第2月曜日の日付を求めることが、成人の日がいつなのかを調べることと同義です。第2月曜日というのは、8日から14日のいずれかの日です。「A2」セル年の「1」月「14」日という意味です。「14」から「0」を引けば「14」となります。上手く「6」から「0」を取得して「14」からマイナスすれば、第2月曜日の「8」から「14」という値が取得できます。このマイナスする「6」から「0」の値をどう取得するかですが、簡単に取得できさえすれば極論何でもかまいませんが、上記の式では「WEEKDAY(DATE(A2,1,0),3)」を使っています。「A2セル」年の「1」月「0」日すなわち「A2セル-1」年(前の年)の「12」月「31」日を意味しています。月曜日:0火曜日:1水曜日:2木曜日:3金曜日:4土曜日:5日曜日:6という値が取得できます。これは成人の日を求めるために、「=DATE(A2,1,14」からマイナスするのに丁度いい数値となっています。この丁度いい数値、前年の12月31日の曜日を数値化した値を取得するのが「WEEKDAY(DATE(A2,1,0),3)」という部分の意味です。38KByte)ダウンロードサンプルファイルの「成人の日を求める」シートには上記のようにA1セルに西暦年を入力したら成人の日が表示される「=DATE(A1,1,14-WEEKDAY(DATE(A1,1,0),3))」という数式が入力してあります。「検証用」シートのC列には「=DATE(A2,1,0)」D列には「=WEEKDAY(DATE(A2,1,0),3)」E列には「=14-WEEKDAY(DATE(A2,1,0),3)」B列には「=DATE(A2,1,14-WEEKDAY(DATE(A2,1,0),3))」といった数式をそれぞれ入力してあり、A列の西暦年を参照して、B列に2000年から2020年の成人の日が表示されるようにしてあります。B:E列の数式の意味と計算されている値とをじっくり見て「=DATE(A2,1,14-WEEKDAY(DATE(A2,1,0),3))」という数式で成人の日が表示できる理屈をご確認ください。ここでは「14」から「6」〜「0」の値を引くという考え方をベースにした方法をご紹介しましたが、もっと別の考え方をしてもOKです。「8」に何らかの方法で取得した「0」〜「6」の数値を足す「7」に何らかの方法で取得した「1」〜「7」の数値を足すといった考え方をベースにした数式にしても構いません。Officeの使い方などを紹介し続け(2012年頃からはVBA関連記事が多め)、毎日5万人の方にご覧いただいています。