六曜計算プログラム
(C) IJssel A.Sugasawa
Option Compare Database
Option Explicit

Function FUNC_ROKUYO(L_DATE As Date) As String
 
  Dim OBJ_DB As Database
  Dim OBJ_RST_六曜情報 As Recordset
  Dim W_DATE As Date
  Dim W_MONTH As Byte
  Dim W_DAYS As Integer

  Set OBJ_DB = CurrentDb
  Set OBJ_RST_六曜情報 = OBJ_DB.OpenRecordset("T_AS_六曜情報", dbOpenTable)

  OBJ_RST_六曜情報.Index = "PrimaryKey"
  OBJ_RST_六曜情報.Seek "<=", L_DATE
  With OBJ_RST_六曜情報
    If .NoMatch Then
      FUNC_ROKUYO = ""
    Else
      W_DATE = !日付
      W_MONTH = !旧暦月
      W_DAYS = L_DATE - W_DATE + (W_MONTH Mod 6)
      Select Case W_DAYS Mod 6
      Case 0
        FUNC_ROKUYO = "赤口"
      Case 1
        FUNC_ROKUYO = "先勝"
      Case 2
        FUNC_ROKUYO = "友引"
      Case 3
        FUNC_ROKUYO = "先負"
      Case 4
        FUNC_ROKUYO = "仏滅"
      Case 5
        FUNC_ROKUYO = "大安"
      End Select
      If (L_DATE - W_DATE) > 29 Then
        FUNC_ROKUYO = ""
      End If
    End If
  End With

  OBJ_RST_六曜情報.Close
  OBJ_DB.Close

End Function



六曜情報テーブル
日付 旧暦月
1998/1/28 1
1998/2/27 2
1998/3/28 3
1998/4/26 4
1998/5/26 5
1998/6/24 5
1998/7/23 6
1998/8/22 7
1998/9/21 8
1998/10/20 9
1998/11/19 10
1998/12/19 11
1999/1/18 12
1999/2/16 1
1999/3/18 2
1999/4/16 3
1999/5/15 4
1999/6/14 5
1999/7/13 6
1999/8/11 7
日付 旧暦月
1999/9/10 8
1999/10/9 9
1999/11/8 10
1999/12/8 11
2000/1/7 12
2000/2/5 1
2000/3/6 2
2000/4/5 3
2000/5/4 4
2000/6/2 5
2000/7/2 6
2000/7/31 7
2000/8/29 8
2000/9/28 9
2000/10/27 10
2000/11/26 11
2000/12/26 12
2001/1/24 1
2001/2/23 2
2001/3/25 3
日付 旧暦月
2001/4/24 4
2001/5/24 4
2001/6/21 5
2001/7/21 6
2001/8/19 7
2001/9/17 8
2001/10/17 9
2001/11/15 10
2001/12/15 11
2002/1/13 12
2002/2/12 1
2002/3/14 2
2002/4/13 3
2002/5/12 4
2002/6/11 5
2002/7/10 6
2002/8/9 7
2002/9/7 8
2002/10/6 9
2002/11/5 10