2015年12月19日
10.二十四節気を求める
二十四節気とは何かという事は、暦のはなし(3)で説明した。ここで考えるのはその
日付の求め方である。暦のはなし(6)で考察した「朔」の日付を求めるのは、旧暦にお
いて月の切れ目を求める事である。二十四節気は、その各月が一体何月になるのかという
月の名前を決定するために必要である。
現在一般に「旧暦」と呼ばれているのは、所謂「天保歴」であり、既に述べたようにこ
の暦は「定気法」で作られている。
恒気法の場合、二十四節気は一年の長さを(時間的に)24等分して作る。一般には
「冬至」が基準に用いられたらしいが、一つの基準が決まれば後は自動的に決まる。
これに対し、定気法は太陽の黄道上の位置(視位置)を15度ずつに区切り、各区切り
に太陽黄径が一致した日を二十四節気に当てはめる。当然等分にはならない。
この話、原理的には割合単純であって、暦のはなし(6)で述べた太陽黄径の計算式を
用いてこの値が 15×n (n=1,2,..........,23,24)に一致
する日時を求めればよい。
しかし、恐らくは近似誤差のせいではないかと思われるが、計算結果は、特に時間が日
付境界の付近で、結果に1日の誤差が入ってくる。最終的には「新こよみ便利帳」などの
データと対象の上、個別の補正が必要になる。(まだ、勉強中です!)
[註]春分、秋分の日については、(*2)の海上保安庁海洋情報部が計算方法を示して
おり、それによって求める事ができるが、他の二十四節気については情報が無い。
それらについては(*6)に詳しい情報がのせられている。
( 6) 二十四節気の略算式 http://www.h3.dion.ne.jp/~sakatsu/sekki24_topic.htm)
わたし自身も色々試みたけれど、今日現在、まだこれ以上の成果は得られていない。
11.ま と め
今まで述べてきたことの総まとめとして、エクセルで一つのUtilityを作成した。
単にマクロで動くプログラムではなく、この中には Work Area , Second Work Areaと言
う名前で、今まで述べてきた説明と実例の検証が含まれている。
このシートは、かつて大学で測量を教えていた頃作成したものがベースになっていて、
色々な事が可能になるよう、特定の機能をマクロ化したものではなく、極力マクロを使用
しないで、基本的にはシート上でも使えるように定義された関数ライブラリの性格を持っ
ている。今回、それをベースとして、旧暦情報の表示機能を作りこんだものである。その
ため、不必要な関数等も結構存在する。
シート上で、関数が入力されているセルも沢山あるので、本シートで使用している関数
につき、先に少しご紹介しておく。
[関数のタイトルと説明]
VBで定義した関数のタイトル一覧(抄)
昔のSHARP系のBasic3 に似ている。
Copyright Hiroyuki Kouzaki
Function cdeg(X As Double) As Double
説明 角度の度.分秒(12.3540 は12度35分40秒)を十進数の度に直す。
Function cdms(X) As Double
説明 十進数の度で表された角度を度.分秒 形式に変換(秒以下は十進)
Function Rad(X As Double) As Double
説明 十進数の度で表された角度をラジアン値に変換
Function Deg(X As Double) As Double
説明 ラジアン値で表された角度を十進数の度に変換
Function Dmsletter(X) As String
説明 度.分秒の値を読み込み、度-分-秒 形式の文字列を出力
Function Hmsletter(X) As String
説明 時間.分秒の値を読み込み、時間:分:秒 形式の文字列を出力
Function MJD(Nen, Tsuki, Nichi As Integer) As Double
説明 グレゴリオ暦の年月日を入力としてMJDを求める
説明 以下、年月日のデータはグレゴリオ暦のものである
Function Keikak(Nen, Tsuki, Nichi As Integer, Jikan As Double) As Double
説明 年月日のデータと時間(JST)を入力として、黄道傾角を求める
説明 以下、時間入力はJST(DMS形式)とする
Function LamdaS(Nen, Tsuki, Nichi As Integer, Jikan As Double) As Double
説明 海上保安庁水路部開発、太陽黄径の略計算式から太陽黄径を求める
説明 長沢工著、天体の位置計算より、ただし一部変更箇所あり
Function JDN(Nen, Tsuki, Nichi As Integer) As Double
説明 年月日のデータからユリウス日を求める
Function Shingetsu(Nen, Tsuki, Nichi As Integer) As Double
Rem 福原直人 作 を改変
説明 新月の日付を求めるJava Script を移植
Function InvJDNY(X As Double) As Integer
説明 ユリウス日を入力として、年を取り出す(グレゴリオ暦前提)
Function InvJDNM(X As Double) As Integer
説明 ユリウス日を入力として、月を取り出す
Function InvJDND(X As Double) As Integer
説明 ユリスウ日を入力として、日を取り出す
Function InvJDNH(X As Double) As Double
説明 ユリウス日を入力として、時間を取り出す
Function LamdaM(Nen, Tsuki, Nichi As Integer, Jikan As Double) As Double
説明 海上保安庁水路部開発、月位置の略計算式から月の黄径を求める
説明 長沢工著、天体の位置計算より
Function DifLamda(Nen, Tsuki, Nichi As Integer, DLamda As Double) As Double
Rem 与えられた日付付近で、太陽と月の黄径差がDlamdaになる、日付を探す。
Rem 出力結果はJD で得られる。DLamda=0 として使用すれば朔、つまり新月を探せる。
本文で述べた機能を実現する関数、出力はエクセルのシリアル値
Function Sekki24(Nen, Number As Integer) As Double
Rem 24節気をもとめる。
Rem Numberは24節気の種類である。
Rem 1=春分、2=清明、3=穀雨、4=立夏、5=小満、6=芒種、7=夏至、8=小暑、9=大暑、
10=立秋、11=処暑、12=白露、13=秋分、14=寒露、15=霜降、16=立冬、17=小雪、
18=大雪、19=冬至、20=小寒、21=大寒、22=立春、23=雨水、24=啓蟄
説明 最終的には内部に幾つかの個別補正を含んでいる。出力はエクセルのシリアル値
Function ExtYear(sr As Double)
説明 負の場合でも大丈夫なように、Year を拡張
Function ExtMonth(sr As Double)
説明 負の場合でも大丈夫なように、Month を拡張
Function ExtDay(sr As Double)
説明 負の場合でも大丈夫なように、Day を拡張
[使い方]
エクセルのマクロ機能を有効にしてください。
使い方は、Work Area 内の年、月、日 の入力用セルに求めたい日付を入力するだけです。
二つのマクロ用ボタンを配置しています。
[今日を表示] 入力欄に当日の日付が入力されます。
[入力] 和歴による入力欄に値を入力後、このボタンを押すと、和歴デー
タが西暦に変換され、入力欄に入ります。
なお、例えば昭和80年のように存在しない年のデータを入力し
てもエラーにはならず、表示欄には平成17年と表示されます。
[注意]Second Work Area は基本的には説明用ですが、その中で得られた結果を直接出
力している箇所が幾つかあり、この部分のデータを削除すると正常には動きません。
出来る限り注意していますが、このUtility の使用につき、当方は何らその結果を
保証するものではありません。本Utility 及びその結果を使用して発生した損害に
対し、当方は一切の責任を負いません。使用する場合は自己責任でお願いします。
ダウンロードはこちらから!