EXCEL – 剰余(余り)を求めるMOD関数を用いた簡易月齢計算と月相

この記事は約3分で読めます。
スポンサーリンク

グレゴリオ暦からの簡易的な月齢計算であれば、日本の天文学者である堀源一郎氏が1968年に「天文月報」で発表した「簡易月齢計算法」を用いることでEXCELでも簡単にできます。

スポンサーリンク

簡易月齢計算法とは

EXCELの式のの前に「簡易月齢計算法」についての概要です。

  • 天文学者の堀源一郎氏が1968年に「天文月報」で発表した計算法です。
    1. 日付を西暦Y年M月D日として、まずYから11を引き、その値を19で割った余りを求め、11を掛けます。この値をAとします。
    2. 月数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
    1. 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セルに月相を表示しています。

MOD関数を用いたEXCELの月齢計算

簡易月齢計算法の計算式

例でB2セルに入れている計算式は以下の式になります。前述の簡易月齢計算法をエクセル計算式にしたものです。
使用している関数の簡単な説明も書いておきます。

=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関数を利用しています。

=IF(INDEX(H:H,MATCH(B2,G:G,0))=0,"",INDEX(H:H,MATCH(B2,G:G,0)))

以上、ご参考になれば幸いです。
皆さまにすべての良きことが雪崩のごとく起きますように。

EXCEL
スポンサーリンク
スポンサーリンク
J.をフォローする
スポンサーリンク
SEBLO

コメント

タイトルとURLをコピーしました