SYUNDOファイル

お役に立てればうれしいです。

万年カレンダー

エクセルで月齢カレンダー

投稿日:2016年12月8日 更新日:

エクセルで月齢カレンダーを作成しました。
年と月を変えると長期間使えます。

月齢は、ユーザー定義関数を作成して求めています。

ユーザー定義関数とは、マクロで自分でオリジナルな関数を作ることです。
詳しいことはここでは省きます。

マクロを使わずに月齢計算をするとシートの数などが多くなるのでカレンダーのような日数が多いと大変なことになるのでマクロを使いました。
このほうが実用的です。

ユーザー定義関数で月齢を求める式を作成して関数を作りました。


スポンサーリンク

月齢カレンダーの説明

作成したユーザー定義関数
geturei:23時59分59秒の月齢
getureiw:12時の月齢
tukimk:月横径‐太陽横径

月の見え方を正確に数字で表す為には正確な太陽の横径と月の横径が必要になります。

太陽と月の横径の差が月の満ち欠けの名前の関係しています。

表1

・日付

数式
例(セルG5)【=IF(MONTH(FLOOR(DATE($A$1,$C$1,0),7)+G$4+$H5)<>$C$1,””,FLOOR(DATE($A$1,$C$1,0),7)+G$4+$H5)】
※日付は万年カレンダー作成のページに詳しく書いています。
万年カレンダーの作成

・月の画像を表示する数字

列A~G、行:6、11、16、21、26、31
例(セルG6)【=IF(G5=””,31,INT(geturei(G5)))】

・画像の切り替え

月の満ち欠けの画像は、画像一覧から画像のリンクでしています。
方法は【画像の自動切り替え】で説明しています。

・月齢

例(セルG7)【=IF(G5=””,””,getureiw(G5))】

月齢の数字は、その日の12時の月齢です。

・月の満ち欠けの名称

月の満ち欠けの名称は
新月は月齢が0になった日です。
三日月は月の太陽の横径の差が40°に一番近い日
上弦は月と太陽の横径の差が90°の日
十三夜は満月の2日前
十四夜は満月の1日前
満月は月と太陽の横径の差が180°の日
十六夜は満月の翌日
十七夜は満月の翌々日
十八夜は満月の三日後
下弦は月と太陽の横径の差が270°の日
二十六夜は月と太陽の横径の差が320°に一番近い日
晦日は月と太陽の横径の差が一番大きい日

というふうに設定しています。

数式:【=IF(ISERROR(VLOOKUP(G5,$B$44:$D$74,3,0)),””,VLOOKUP(G5,$B$44:$D$74,3,0))】

セルB44~D44に月の満ち欠けの名称一覧を作成してVLOOKUPで日付と関連付けしています。

満ち欠けの名称一覧の説明

・B列
数式(セルB44)【=DATE(A1,C1,1)】
月齢カレンダーの年と月を持ってきて1日に日に設定してる式です。
数式(セルB45)【=B44+1】
1日に1足して2日にしています。以下も同じです。

・C列
数式【=IF(tukimk(B44)<0,tukimk(B44)+360,tukimk(B44))】

tukimkはマクロで作成したユーザー定義関数で「月横径‐太陽横径」です。

数式は月の満ち欠けの角度を出した計算式です。

「月横径‐太陽横径」がマイナスになると360°足しています。

・D列
数式(セルD44)
※この数式ではバグが発生します。

【=IF(C44=(SMALL($C$44:$C$74,1)),”新月”,
IF(E44=(SMALL($E$44:$E$74,1)),”三日月”,
IF(C44=(SMALL($C$44:$C$74,COUNTIF($C$44:$C$74,”<=90″)+1)),”上弦”,
IF(C44=(INDEX($C$44:$C$74,MATCH(180,$C$44:$C$74)-1)),”十三夜”,
IF(C44=(INDEX($C$44:$C$74,MATCH(180,$C$44:$C$74))),”十四夜”,
IF(C44=(SMALL($C$44:$C$74,COUNTIF($C$44:$C$74,”<=180″)+1)),”満月”,
IF(C44=(INDEX($C$44:$C$74,MATCH(180,$C$44:$C$74)+2)),”十六夜”,
IF(C44=(INDEX($C$44:$C$74,MATCH(180,$C$44:$C$74)+3)),”十七夜”,
IF(C44=(INDEX($C$44:$C$74,MATCH(180,$C$44:$C$74)+4)),”十八夜”,
IF(C44=(SMALL($C$44:$C$74,COUNTIF($C$44:$C$74,”<=270″)+1)),”下弦”,
IF(F44=(SMALL($F$44:$F$74,1)),”二十六夜”,IF(C44=(MAX($C$44:$C$74)),”晦日”,””))))))))))))】

C列の月の満ち欠けの角度が一か月のうち表1の角度に一番近い時に満ち欠けの名称をもってくる数式です。
ただし三日月はE列の一番小さい数字、二十六夜はF列の一番小さい日にしています。

【追記】
MATCH関数など順番に並んでないと正確に抽出できないことがあります。
指摘があったように上記の式ではうまく表できない年や月があり次のように変更しました。
今のところちゃんと表示できています。
また、何か不具合があれば連絡してください。

数式(セルD44)
【=IF(C44=(SMALL($C$44:$C$74,1)),”新月”,IF(E44=(SMALL($E$44:$E$74,1)),”三日月”,IF(C44=(SMALL($C$44:$C$74,COUNTIF($C$44:$C$74,”<=90")+1)),"上弦",IF(C44=(INDEX($C$44:$C$74,MATCH(MIN(ABS($C$44:$C$73-155)),ABS($C$44:$C$73-155),0))),"十三夜",IF(C44=(INDEX($C$44:$C$74,MATCH(MIN(ABS($C$44:$C$73-167)),ABS($C$44:$C$73-167),0))),"十四夜",IF(C44=(SMALL($C$44:$C$74,COUNTIF($C$44:$C$74,"<=180")+1)),"満月",IF(C44=(INDEX($C$44:$C$74,MATCH(180,$C$44:$C$74)+2)),"十六夜",IF(C44=(INDEX($C$44:$C$74,MATCH(MIN(ABS($C$44:$C$73-205)),ABS($C$44:$C$73-205),0))),"十七夜",IF(C44=(INDEX($C$44:$C$74,MATCH(MIN(ABS($C$44:$C$73-220)),ABS($C$44:$C$73-220),0))),"十八夜",IF(AND(C43<270,C44>=270),”下弦”,IF(F44=(INDEX($C$44:$C$74,MATCH(MIN(ABS($C$44:$C$73-320)),ABS($C$44:$C$73-320),0))),”二十六夜”,IF(C44=(INDEX($C$44:$C$74,MATCH(MIN(ABS($C$44:$C$73-350)),ABS($C$44:$C$73-350),0))),”晦日”,””))))))))))))】

※カーソルを一番後ろに持っていきCtrl+shiftキーを押しながらEnterキーを押して下さい。

・E列
数式(E44)【=ABS(C44-40)】

・F列
数式(F44)【=ABS(C44-320)】

E列とF列を設けたのはD列の数式がやり易かったからです。

完成品はダウンロードできます。【月齢カレンダー】
圧縮ファイルの解凍の説明はこちらです。


スポンサーリンク

-万年カレンダー

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

関連記事

エクセルで万年カレンダー作成(3)レイアウトの調整

  エクセルで万年カレンダー作成(1) エクセルで万年カレンダー作成(2) エクセルで万年カレンダー作成(1)(2)で祝日、六曜、旧暦、二十四節気、雑用が表示されるようになり万年カレンダーは …

万年カレンダー一覧表の説明

  万年カレンダーに使用している一覧表の説明です。 万年カレンダーシート 万年カレンダーを作成するためのシートです。 「2023」とだけ入力しています。 これは「二十四節気」シートの年と関連 …

エクセルで万年カレンダー作成(2)

(エクセルで万年カレンダー作成(1)) エクセルの万年カレンダー作成は、六曜、祝日、旧暦、二十四節気、雑節を含んでいます。 エクセルで万年カレンダー作成(1)では、準備編と六曜の挿入が終わりました。 …

エクセルで干支カレンダー(マクロ編)

エクセルのマクロでユーザー定義関数を作成して万年干支カレンダーを作成しました。 干支は、新暦、旧暦、節切りの三種類求めることができます。 スポンサーリンク 新暦、旧暦、節切りの簡単な説明 新暦 新暦は …

エクセルで万年カレンダーを作りました。

エクセルで万年カレンダーの作成を調べましたがあってもほとんど祝日くらいまでです。 そこで旧暦や六曜、二十四節気、雑節を含む万年カレンダーを作成しました。 (範囲は2010年~2050年までです。) そ …

カテゴリー