
『こどもエクセル』で思考力を伸ばす
「ツェラーの公式」というのがあるそうです。西暦で〇年〇月〇日と指定すると、その日が何曜日か分かるとかいう。

今回は夏休みの課題で、この『曜日が分かるシステム』を、なんと手作りExcelで作ってしまおうというチャレンジです。
ツェラーの公式とは関係ない在来工法ですが、こどもの「考える力」トレーニングにピッタリです。お試しください。

「うるう年」とは
うるう年と聞くと「4年に一度くるやつね」とすぐ答えが返ってきますが、実は例外が2つあります。
1つは「100年、200年、300年・・・」という100年ごとの節目は、うるう年ではありません。そしてもう1つは「400年、800年、1200年・・・」とかの400年ごとの年は、うるう年になります。
早くもヤヤコシくなってきましたね。
考え方はこれでOK ?
それでは、さっそくこの『曜日当てシステム』を、学校で習い始めたExcelを使って作ってみることにします。
手の付け方としては、ざっとこんな感じでいかがでしょうか。
🔴年を見るとうるう年だったりそうでなかったり。うるう年の2月は29日。ただでさえ30日と31日の月があって、それが奇数偶数でスパッと分けられない! ☜ でも、曜日はただひたすら月曜から日曜まで、順番を崩すことなく循環している。
🔴なので、年とか月を全部バラして日に置き換えて、これを西暦1年1月1日からずっと並べて、それに曜日のラベルをペタペタ貼っていくのが良さそう。
🔴日のデータ(順番)は、知りたい年月日の前年までを一つの塊にして、知りたい年月日の年の分をもう一つの塊に分けて求めると、スッキリするかも(後で合体)。
Step1. 知りたい年がうるう年なのかどうか
「うるう年かどうか」は大事なポイントなので、事前準備として『うるう年判定テーブル』を用意します。
<うるう年判定テーブル>

〇 テーブルの作り方
Excelのセルに式を入れていきます。
<B3に入れる式>
=IF(MOD(A3,4)=0,1,0)
A3に入力した数字(年)を4で割って、余りがなければ「1」を表示します(⇒ その年の日数を1日増やす)。
<C3に入れる式>
=IF(MOD(A3,100)=0,-1,0)
A3に入力した数字(年)を100で割って、余りがなければ「-1」を表示します(⇒ うるう年を取り消して、増やした日数を元に戻す)。
<D3に入れる式>
=IF(MOD(A3,400)=0,1,0)
A3に入力した数字(年)を400で割って、余りがなければ「1」を表示します(⇒ もう1度うるう年にして1日増やす)。
<E3に入れる式>
=B3+C3+D3
4年、100年、400年チェックの最終判定を表示する(⇒ 「1」ならうるう年で、日数も1日多い)。
Step2. 西暦1年1月1日から前年末までの累計日数を出す
皆さんは、西暦1年1月1日から今日まで、何日間経っているか知っていますか?
フツーの人はそんなこと考えたことないと思いますが、ザックリ74万日です。日本で生まれた子どもの数が2021年は81万人でしたから、去年生まれた子どもを並べたよりも少ないくらいですね。
手で書き出すと人生詰んでしまいますが、Excelなら全然問題ないボリュームです。
<知りたい年月日の前年末までの日数を調べるテーブル>
例えば、1600年✖月△日を知りたいとしたら、1599年12月31日までの日数を出してから、それまでの期間のうるう年(日数)を調整します。

〇 テーブルの作り方
<G3>1年365日で単純日数を出す
=(A3-1)*365
(A3−1)が前年の数字になります。それに365日をかけます。
<H3>4年周期のうるう年は何回あったか
=INT((A3-1)/4)
前年(A3-1)までに4年周期のうるう年が何回あったかを調べます。INTを使うと整数になります。
<I3>100年周期の年は何回あったか
=IF(A3-1>=100,INT((A3-1)/100),0)
100年以上経過してから前年までに、100年周期の年が何回あったかを調べます。
<J3>400年周期の年は何回あったか
=IF(A3-1>=400,INT((A3-1)/400),0)
400年以上経過してから前年までに、400年周期の年が何回あったかを調べます。
<K3>うるう年調整後の累積日数を出す
=G3+H3-I3+J3
上で調べたデータを計算します。
Step3. 知りたい年の経過日数を出す
前年末までの日数が分かったので、次は知りたい年に入ってからの経過日数を出します。
<知りたい年の日数が分かるテーブル>

〇 テーブルの作り方
<N3>その年の1月1日から前月末までの日数を出す
=SWITCH(M3,1,0,2,31,3,59,4,90,5,120,6,151,7,181,8,212,9,243,10,273,11,304,12,334)
ここは難しい式を使うのではなく、単純に「1月だったら前月末まで0日」「2月だったら前月末まで31日」「3月だったら前月末まで59日」という具合に、実数が表示されるようにします(うるう年でも28日で計算)。

<P3>うるう年の場合、日数を調整する(1日増やす)
=IF(AND(E3=1,M3>=3),1,0)
うるう年(E3=1)の場合、3月以降(M3>=3)の日数を1日増やします。
<Q3>西暦1年1月1日からの累計日数を出す
=K3+N3+O3+P3
前年末までの経過日数(K3)と、知りたい年の経過日数(うるう年調整済)を合計して、西暦1年1月1日からの累計日数を出します。
Step4. 曜日のローテーションを追加する
最後に、曜日に番号をつけたリストを用意します。

<完成型>

<S3>日を曜日分けする
=MOD(Q3,7)
西暦1年1月1日以降の日を7で割って、曜日にリンクさせます。
<T3>曜日をセットする
=SWITCH(S3,1,"月曜日",2,"火曜日",3,"水曜日",4,"木曜日",5,"金曜日",6,"土曜日",0,"日曜日")
この記事を書いた「2022年8月11日、木曜日」を基準日にして曜日サイクルに合わせました。
Step5. 動作確認(テスト)してみる
さて、手作りExcelで『曜日が分かるシステム』ができあがったら、たくさんの年月日を入力して試してみましょう。iPadやGoogleのカレンダーと合っていましたか?
西暦は、1582年にユリウス暦からグレゴリオ暦に切替わったので、iPadのカレンダーとか見ると10月から11月にかけて曜日が飛んでいます。

いかがでしたか? Excelの関数なども、こうして実際に使いながら覚えると楽しいですね。
ではまた!