2016年5月29日日曜日

西暦9999年12月31日は金曜日!? 万年カレンダー

エクセルで「万年カレンダー(Perpetual Calender)」を作る


任意の年と月のカレンダーがあっという間に作れる、それがエクセルを使った「万年カレンダー」。

パソコンの初級コースでは、ワードやエクセルを使ったカレンダー作りがよく取り上げられます。
実際のカレンダーを見ながら、表やセルに数字を入力して作成するのが一般的ですが、
手元にカレンダーのない過去や未来のカレンダーの作成は困難です。

エクセルを使うと、任意の年と月を指定するだけで当該月のカレンダーを
いとも簡単に作成することが出来ます。
(但し、作成できるのは1900/1/1~9999/12/31の間だけです)

【必要な知識(初級+α)】
 1.シリアル値の概念の理解(必須)
     シリアル値については、当ブログ内
  [Excel[1]秒は 0.00001157407   の怪]を参照して下さい。
 2.日付の処理に係る2つの関数の理解(必須)
  ①DATE関数 =DATE(年,月,日)
   数値で指定した[年][月][日]に対応する[日付データ(シリアル値)]を作る
  ②WEEKDAY関数 =WEEKDAY(シリアル値,種類)
   指定した日付データ(シリアル値)に応じた[曜日]を調べ、"曜日番号"で示す。
   引数の[種類]を[1]とするか省略すると、
   日曜から土曜に1~7の曜日番号が振られる(Excel2010以降では、
   種類として11~17が追加されています)。

 3.表示形式の変更(必須)
   日付データ(シリアル値)を日付のみ表示させる
 4.条件付き書式設定の理解(必須ではありません)
  当該月でない日付の数字を見えなくしたり、
  薄い色にするには[条件付き書式設定]を使います。
  見えなくするためには、日の数字の色をカレンダーの背景色と同じにします。
  5.スピンボタンの理解(必須ではありません)
  作成したい年、月の入力を容易にするためにはスピンボタンを使うといいでしょう。

【万年カレンダー作成のポイント】  
 「カレンダーの左上の最初の日曜日が何月何日(シリアル値で)になるのか?」を求めることです。
以下の計算で求めます。
①指定された年、月の1日のシリアル値をDATE関数を使って求めます。
  =DATE(年,月,1)
②指定された年、月の1日の曜日番号をDATE関数とWEEKDAY関数を使って求めます。
     =WEEKDAY(DATE(年,月,1),1)  種類として[1]を指定します。
②で求めた曜日番号から、何日戻れば日曜の日付(シリアル値で)になるのか?を計算します。
 の曜日番号は、日曜日が[1]から始まっているので 
    単純に[① - ②]で計算すると「1日余分に引きすぎる」とになります。そこで[+1]して調整します。
④従って、左上の最初の日曜のセルに入力する計算式は、
 =DATE(年,月,1) - WEEKDAY(DATE(年,月,1),1) + 1
 となります。
⑤日付の入っている全てのセルの表示形式をユーザー定義で[d]に設定します。

    各セルに入力する計算式↓


万年カレンダーで見る1900年1月,9999年12月のカレンダー
1900年1月1日は日曜日、9999年12月31日は金曜日のようです。

 Excelの日付関数が正しいとすれば、10000年1月1日は"土曜日"ということか~?
 それまで人類が生存しているかどうか? 
  地球温暖化、核戦争、AIによる支配、未知のウイルス、巨大隕石の衝突、・・
1900年1月

9999年12月

因みに、9999年のカレンダーは以下の通りです(令和7981年、干支は亥)。

エクセルを使った万年カレンダーには様々なバリエーションが考えられます。
関心のある方は「変わり種万年カレンダー」を参照して下さい。
ダウンロードも出来ます。更に面白い万年カレンダーを考えてみてください。

詳しい解説書:万年カレンダー解説

色々な種類の万年カレンダーは「変わり種万年カレンダー」 で紹介していますが
「リンク先にジャンプするのは面倒くさい」、「自分で作成するのは面倒」などとお考えの物ぐさな貴方へ。
 万年カレンダー(1ヶ月用)
 万年カレンダー(1年間用)

を用意しましたのでお試しください。