忍者ブログ
25 April

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

28 February

【Access/VBA】備忘録)祝日マスターとそれを使ったカレンダーデータ作成

割と手が込んでて、汎用性がそれなりにあり、ソース無くなってまた組む羽目になったら面倒なので。

【参考】
【Excel Tips】成人の日や体育の日などのハッピーマンデーの日付を求めるには?
http://enterprisezine.jp/iti/detail/854
【Excel Tips】春分の日や秋分の日を求めるには?
http://enterprisezine.jp/iti/detail/865

祝日マスター
-------------------------------------------
管理No名称祝日区分振替基準日
1元旦011  0
2成人の日11 2 0
3建国記念の日0211  0
4春分の日23  INT(20.8431+0.242194*(★年-1980))-INT((★年-1980)/4)0
5昭和の日0429  0
6憲法記念日053  5
7みどりの日054  5
8こどもの日055  0
9海の日17 3 0
10敬老の日19 3 0
11秋分の日29  INT(23.2488+0.242194*(★年-1980))-INT((★年-1980)/4)0
12体育の日110 2 0
13文化の日0113  0
14勤労感謝の日01123  0
15天皇誕生日01223  0
-------------------------------------------

祝日計算の心臓部↓
-------------------------------------------
Select Case RS(0)!祝日区分
Case 0
wkDay = RS(0)!日
Case 1
wkWeek = Weekday(DateSerial(mYear, RS(0)!月, 0), 3)
If wkWeek = 7 Then wkWeek = 0 ' エクセルと統一する為
wkDay = (7 * RS(0)!週) - wkWeek
Case 2
wkDay = Eval(Replace(RS(0)!式, "★年", mYear))
End Select
-------------------------------------------

-------------------------------------------
Public Sub Crt_Doniti(mYear As Integer)
'================================
' 土日情報
'================================
Dim DB As DAO.Database, RS As DAO.Recordset
Dim wkDay As Integer, m As Integer, i As Long, wkWeek As Long, wkDate As Date, WeekFlg As Integer


Set DB = OpenDatabase(DB_jinji, False, False, pDB_Jinji)
Set RS = DB.OpenRecordset("Select * From お休み管理用のテーブル", dbOpenDynaset)

WeekFlg = 2 ' 最初の土曜日
For m = 1 To 12

Set_SanDay:
wkWeek = Weekday(DateSerial(mYear, m, 0), WeekFlg)

Select Case wkWeek
Case 6: wkDay = 7
Case 7: wkDay = 6
Case Else: wkDay = 6 - wkWeek
End Select

For i = wkDay To Day(DateSerial(mYear, m + 1, 0)) Step 7

wkDate = DateSerial(mYear, m, i)
wkWeek = Weekday(wkDate, 2)

RS.FindFirst "日付=#" & wkDate & "#"
If RS.NoMatch Then

RS.AddNew
' (略)
RS.Update
End If

Next

' 最初の日曜日
If WeekFlg = 2 Then
WeekFlg = 3
GoTo Set_SanDay
Else
WeekFlg = 2
End If

Next

End Sub
-------------------------------------------

拍手

PR