造暦家のための Excel Tips を幾つか

モジュロ演算は便利

中国占術において干支暦は最重要なものの1つで、甲子から癸亥までの60の周期を持っている。Excel で日の干支を決めるのは、そんなに難しい話ではなくて、ある日の干支が分かっているなら、その次の日は元の干支の数に1を加えてやればよい。で、60を越えたら60を引けば良い。ただこれに if 関数を使うのは不細工だというのが私の感触だ。そこで mod 関数を使う。
mod 関数はモジュロ演算を行う。第1引数を愛2引数で割った時の余りを求めることができる。仮にセル A1 に干支の数が入っているなら、セル A2 に以下を入れると翌日の干支数になる。

=mod(A1,60)+1

前日が癸亥の60なら、60で割り切れるので剰余は0なので A2 の計算結果は1になる。これを下方向にコピーすれば1~60のサイクルが得られる。
干支の数から十干の数を得るとする時に、セル A2 の干支の数から十干の数を計算する式をセル B2 に入れるとすると、

=mod(A2-1,10)+1

を入れてやれば良い。例えば干支が癸酉(10)の時に、1を引くと9となる。それを10で割った時の剰余は9で、それに1を加えるので10となる。これは癸だ。

十二支を得るのも同様で、C2に以下を入れれば良い。

=mod(A2-1,12)+1

例えば干支が乙亥(12)の時に、1を引くと11となる。それを12で割った時の剰余は11で、それに1を加えるので12となる。これは亥だ。

数を漢字に直すのは mid 関数を使えば良い。B2 に十干の数、C2 に十二支の数が入っているとすると、十干、十二支の文字は以下で求めることができる。

=mid("甲乙丙丁戊己庚辛壬癸",B2,1)
=mid("子丑寅卯辰巳午未申酉戌亥",C2,1)

説明のために元の文字列を式内にベタに書いているけれども、どこかのセルに書いておいて絶対参照にしておけば良い。

日家九星でも同じようなことができる。陽遁は干支と同じように、

=mod(A1,9)+1

で得られる。陰遁は1~9までのサイクルということを考えると、8を加えることと1を減じることはモジュロ演算では同じになる。前日は1加算されているので、以下になる。

=mod(A1+7,9)+1

前日が一白(1)なら、7を加えると8になる。9による剰余は8なので、それに1を加えると9(九紫)になる。

こういう感じでモジュロ演算を使うと if 関数の中にあれこれ書かなくても済む。