B  旧暦                                                                    

          Aの計算で得られる朔が旧暦の1日だが、新暦元日の旧暦の日を求めるには前年の12

の朔から日を追うことになる。 日の次に 旧暦の何月かを求める。これには一般に節気

の大寒が含まれる月を12月とすることになっている。          以上 3-1 を参照

次にプログラムの一部を示す。

 

' 前年新暦12月中の旧暦朔日のサ−チ

For j = 1 To DA    DA31

    DC = DC + 1: Grid1.Row = 53 + j: Grid1.Col = 18: L8$ = Grid1.Text

    If InStr(L8$, "") Then DC = 1: Swich12 = 1   もし朔日は旧暦1日、SW1

   Grid1.Col = 19: Grid1.Text = DC         旧暦の欄に日を書き込む

    If Swich12 >= 1 Then              もしSW1になった後で

        Grid1.Col = 16: L7$ = Grid1.Text

        If L7$ = "大寒" Then MK = 12          ある日大寒だったら

旧暦月を12月としておく。

    End If                       

Next

DCC=DC

'///新暦12月中の旧暦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日、SW1

        If Swich12 >= 1 Then                もしSW1になった後で

            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月のSWSwi(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が、旧暦の閏月となる。
NextGoSub UruuHosei          例外処理 (やはり例外も多い)



戻る