グレゴリオ暦からの簡易的な月齢計算であれば、日本の天文学者である堀源一郎氏が1968年に「天文月報」で発表した「簡易月齢計算法」を用いることでEXCELでも簡単にできます。
簡易月齢計算法とは
EXCELの式のの前に「簡易月齢計算法」についての概要です。
- 天文学者の堀源一郎氏が1968年に「天文月報」で発表した計算法です。
- 日付を西暦Y年M月D日として、まずYから11を引き、その値を19で割った余りを求め、11を掛けます。この値をAとします。
- 月数Mと下表からBを求めます。
月(M) 1 2 3 4 5 6 7 8 9 10 11 12 B 0 2 0 2 2 4 5 6 7 8 9 10 - A+Bに日Dを足した数を30で割った余り(剰余)が月齢となります。
- 月齢をageとし、剰余演算子を%とすると、上記内容は
age = (((Y−11)%19)×11+B(M)+D)%30
という数式で表せます。 - この計算での月齢は最大2程度の誤差があります。
簡易月齢計算法について詳しくはこちらをご覧ください。
月齢 - Wikipedia
剰余を求めるMOD関数を使って簡易月齢計算をする
下記例の画像では、B1セルに日付、B2セルに前述の数式に基づいた計算式を入れ、日付から月齢を計算しています。
前述の月数Mから求めるBは、D列E列に表を作り、B1セルの日付の月数から求めています。
ついでに同様の方法で、これも誤差は生じますが、月齢から月相がわかる表をG列H列に作り、B3セルに月相を表示しています。
簡易月齢計算法の計算式
例でB2セルに入れている計算式は以下の式になります。前述の簡易月齢計算法をエクセル計算式にしたものです。
使用している関数の簡単な説明も書いておきます。
EXCEL
=MOD((SUM(MOD((YEAR(B1)-11),19)*11,INDEX(E:E,MATCH(MONTH(B1),D:D,0)),DAY(B1))),30)
- YEAR(シリアル値),MONTH(シリアル値),DAY(シリアル値)
- それぞれ、日付に対する年、月、日を返します。
- MATCH(検査値,検査範囲,[照合の型])
- 検査範囲から検査値を検索し、その範囲内での相対的な位置を数値で返します。
- INDEX(配列,行番号,[列番号])
- 指定された行と列が交差する位置にあるセルの値を返します。
- MOD(数値,除数)
- 数値を除数で割ったときの剰余(余り)を返します。
上記より、INDEX(E:E,MATCH(MONTH(B1),D:D,0)) は、B1セルの日付の月数を検索値としてD列を検索し、その行番号のE列の値を返します。これが、簡易月齢計算法における“月数Mから求めるB”に当たります。
あとは、剰余を求める箇所にMOD関数を用いることで計算式が出来ます。
月相については下記の式で、“月数Mから求めるB”と同様にMATCH関数とINDEX関数を利用しています。
EXCEL
=IF(INDEX(H:H,MATCH(B2,G:G,0))=0,"",INDEX(H:H,MATCH(B2,G:G,0)))
以上、ご参考になれば幸いです。
皆さまにすべての良きことが雪崩のごとく起きますように。
コメント