B 旧暦
Aの計算で得られる朔が旧暦の1日だが、新暦元日の旧暦の日を求めるには前年の12月
の朔から日を追うことになる。 日の次に 旧暦の何月かを求める。これには一般に節気
の大寒が含まれる月を12月とすることになっている。
以上 表 3-1 を参照
次にプログラムの一部を示す。
' 前年新暦12月中の旧暦朔日のサ−チ
For j = 1 To DA ‘DAは31日
DC = DC + 1: Grid1.Row = 53 + j: Grid1.Col
= 18: L8$ = Grid1.Text
If InStr(L8$, "●") Then DC = 1: Swich12 = 1 もし●朔日は旧暦1日、SWは1
Grid1.Col = 19: Grid1.Text = DC 旧暦の欄に日を書き込む
If Swich12 >= 1 Then もしSWが1になった後で
Grid1.Col = 16: L7$ = Grid1.Text
If L7$ = "大寒" Then MK = 12 ある日大寒だったら
旧暦月を12月としておく。
End If
Next
DCC=DC
'///新暦1月2月中の旧暦12月のサ−チ///
For i = 1 To 2
MM = i
GoSub TUKINISSU
For j = 1 To DA
DC = DC + 1: Grid1.Row = 3 + j: Grid1.Col
= 8 + (i - 1) * 10: L8$ = Grid1.Text
If InStr(L8$, "●") Then DC = 1: Swich12 = 1 もし●朔日は旧暦1日、SWは1
If Swich12 >= 1 Then もしSWが1になった後で
Grid1.Col = 6 + (i - 1) * 10: L7$ = Grid1.Text
If L7$ = "大寒" Then ある日大寒だったら
If i = 1 Then MK = 11 旧暦月を11月としておく。
Exit For
End If
Else もしSWが 0 のまま
Grid1.Col = 6 + (i - 1) * 10: L7$ = Grid1.Text
If L7$ = "大寒" Then MK = 12 ある日大寒だったら旧暦月を12月とする。
End If
Next
Next
GoSub DaikanHosei 例外処置 数例
次に閏月であるが、一般に24節気のうち中気を含まない月の前月を閏月とする。
表 4-1 の例では一部の表示になっているが、これも前年の12月から調査する。
表の6月と7月(新暦)の列に旧暦の5月朔と6月の朔がある。この間が旧暦の5月に
なる訳だが、この期間に節気は半夏生・処暑・土用だけで、中気を含んでいないので、
前月の旧暦 4月が約束どおり閏月となる。
次にプログラムの一部を示す。
+++++++旧暦の閏月を探る+++++++
For i = 1 To 12 1月から 12月まで
MM = i
GoSub TUKINISSU
各月の日数を取得
For j = 1 To DA
1日から末日まで
DC = DC + 1: Grid1.Row = 3 + j: Grid1.Col
= 8 + (i - 1) * 10: L8$ = Grid1.Text
If InStr(L8$, "●") Then DC = 1: iii = iii + 1: Swi(iii)
= 1: Swj(iii) = 3 + j ‘DCは旧暦の日
If Swi(iii) >= 1 Then ‘iiiは●朔日になると1が加算される、すなはち旧暦の月である。
‘要するに Swi(1)が旧暦1月のSW〜Swi(12)が旧暦12月のSWである。
Grid1.Col = 6 + (i - 1) * 10: L7$ = Grid1.Text
Select Case L7$
‘L7$の内容(春分〜雨水)によって下記の作業を
Case "春分" もし旧暦のある月の中に春分があればSwi(iii)は
2となる。
Swi(iii) = Swi(iii) + 1
Case "穀雨" 〃 穀雨 〃 2 〃
Swi(iii) = Swi(iii) + 1
Case "小満" 以下 同様
Swi(iii) = Swi(iii) + 1
Case "夏至"
Swi(iii) = Swi(iii) + 1
Case "大暑"
Swi(iii) = Swi(iii) + 1
Case "処暑"
Swi(iii) = Swi(iii) + 1
Case "秋分"
Swi(iii) = Swi(iii) + 1
Case "霜降"
Swi(iii) = Swi(iii) + 1
Case "小雪"
Swi(iii) = Swi(iii) + 1
Case "冬至"
Swi(iii) = Swi(iii) + 1
Case "大寒"
Swi(iii) = Swi(iii) + 1
Case "雨水"
Swi(iii) = Swi(iii) + 1
Case Else
'以上の作業で通常は中気を含むので、殆どSwi(iii)は
2となる。
End Select
End If
Next j
Next i
For iii = 1 To 12 ‘ iii は 旧暦の月
If Swi(iii) < 2 Then '以上の作業で Swi(iii) が 2 に達していないものを探る。
SWCol = 8 + (iii - 1) * 10: SWRow = Swj(iii)
Text3.Text = Text3.Text & " 閏月 = " & iii - 1 & "〜
" & iii & "月 "
MKU = iii 探り出したらそのときの
iii が MKU である。
End If
‘この後の処理でMKU-1が、旧暦の閏月となる。
Next


戻る