万年暦にせよ、干支カレンダーにせよ、だらだらとオートフィルで作るのは簡単です。
初期値さえわかれば、あとは1つずつ干支を進めるだけだから。
ただ、ややこしいのは節入日。これはどこかにデータベースとして確保してないと、計算では難しそうだ。
だったら、次の手順としては、常に節入日を過ぎていると仮定して月干支や年干支を解くというやり方だろう。
日干支は簡単だ。1月27日の干支は?と聞かれて「乙酉」と答えられれば良い。
1月の干支は?と聞かれて「節入日を超えているのであれば癸丑」と答えれば良い。
2023年の干支は?と聞かれても「立春を超えていれば癸卯」と答えれば良い。
さて、続きはどうする?
まずはスタートはこの画面から。

とりあえず、六十干支は表として持っているという前提だ。
なんとかなりそうな予感だけはするので、さっそくあれこれエクセルについてサイトで調べてみた。
では結論から先に。。。

VLOOKUPという関数を使いました。
まず、日干支を考えます。1月27日は乙酉です。六十干支の表でいうと、22番目になります。
2023/1/27のidを1として、idのほうをオートフィルにしてます。
A4にid=1が入っているので、22番目は言い換えるとA4+21番目になります。
こうしておけば、こっちもオートフィルで数字が1つずつ進みます。
あとは、VLOOKUP(A4+21,I4:L63,4,FALSE)とすればいいのです。
I4:L63は六十干支の表の範囲ですね。ピンク色に染まっている範囲です。
4というのは4列目、4カラム目ということで、干支が入っている縦の列を指します。
A4+21は検索をかけるキーワードになりまして、六十干支の表の中でA4+21、すなわち22があるのは1つしかありません。
これが選ばれることにより、行列の何行目かが選ばれます。そのあと、縦の4列目を選ぶと、狙っている乙酉が選ばれるというわけです。
ただ、これ、22はオートフィルで、23,24になり、いずれは60よりも多い値になります。61は1とみなして、六十干支を順繰り扱いたいわけです。
だから、A4+21とするかわりに、MOD(A4+20,60)+1としました。
A4+20に入る数字を60で割った余りを出すのがこのMOD関数です。A4+20は21です。これを60で割ると余りは21,そしてそのあとに1を足して22と狙う数字が出てきます。
なぜややこしく+1にしたりしているのでしょう?
一般にMOD(N,60)を考えます。Nには1~60の数字が入るとしましょう。60で割った余りはどうなりますか?ほとんどNと同じ値ですが、唯一、N=60のときだけ、60とならずに0となりますよね?
つまり、60で割った余りは、0~59の整数となるわけです。
でも六十干支の表に使っている数字は1~60じゃないですか。だからMOD関数を使った後に1を足したのです。
狙うものが22で、MOD()+1なら、MOD()は21にならなくてはいけません。
id=1なので、あと20足せばよい、だからA4+20としたんです。
月干支も年干支も同様にできました。
どうでしょう?オートフィルは相変わらず使っちゃっているうえに、節入日はギブアップ状態ですが、徐々に雰囲気が出てきましたねぇ。
ただ、今は、万年暦っぽいというか、だーと書き出してしまってます。
本当は、よくサイトやアプリで見るような、入力したらポンと干支がでる、そんなのがいいですよね。
それはまた徐々に進めていきましょう。
コメント