1.変動する祝日の計算
【カレンダーのVBA】
[戻る]
■概要説明
- 成人の日、体育の日、春分の日、秋分の日は年により異なります。
- 成人の日、体育の日はその月の第二月曜日が何日かを計算します。
- 春分の日、秋分の日は太陽が春分点、秋分点を通過する瞬時が含まれる日を計算します。
50年位は0時の前後数分以内に成らないので略算式で計算が間違い無いと思います。
実際には、前年の2月1日の官報に発表され正式な物となりますので、略算式で求められた
計算値の修正が出来る様にする必要があります。
- A5サイズシステム手帳では、旧暦日計算、日の出・日の入り計算のためにも、太陽の視赤経や 視赤緯計算をしています。この説明は膨大に成るので割愛します。天文計算ソフトをアップしま したので、天体の軌道計算による日の出・日の入り、月の運行計算をご確認下さい。MDBファ イルですから自由にカスマタイズして下さい。
ダウンロード はこちらから。 125,286 Bytes ISDN約40秒
■成人の日、体育の日のVBAについて
或る日が所属する年の、成人の日と体育の日を計算する関数を作ります。
まず下図の祝日テーブルを作ります。
Accessのモジュールに以下を入力します。
Public Function KOSHIN (k As Date) 関数名をKOSHINとします。
Dim TSUKI As String
Dim TSUKI1 As String
Dim HENSU As Integer
Dim HENSU1 As Integer
If Year(k) < 2000 Then 西暦1999年以前の時
DoCmd.RunSQL "UPDATE 祝日 SET 祝日.祝日 = '" & "01/15" & "'" & " WHERE 祝日.祝日コード = " & 2 & " ;" 祝日テーブルの祝日コード2の祝日を書き換えます。
DoCmd.RunSQL "UPDATE 祝日 SET 祝日.祝日 = '" & "10/10" & "'" & " WHERE 祝日.祝日コード = " & 11 & " ;" 祝日テーブルの祝日コード11の祝日を書き換えます。
Else 西暦2000年以降の時
HENSU = DatePart("w", DateSerial(Year(k), 1, 1)) 指定年の1 月1日の曜数を求めます。
Select Case HENSU
Case 1 1日が日曜日の時2日が第一月曜日になる。
TSUKI = "01/09" よって9日が第二月曜日と求められる。
Case 2
TSUKI = "01/10"
・
・
Case 7
TSUKI = "01/15"
End Select
DoCmd.RunSQL "UPDATE 祝日 SET 祝日.祝日 = '" & TSUKI & "'" & " WHERE 祝日.祝日コード = " & 2 & " ;" 祝日テーブルの祝日コード2の祝日を書き換えます。
HENSU1 = DatePart("w", DateSerial(Year(k), 10, 1)) 指定年の10月1日の曜数を求めます
Select Case HENSU1
Case 1 1日が日曜日の時2日が第一月曜日になる。
TSUKI1 = "10/09" よって9日が第二月曜日と求められる。
Case 2
TSUKI1 = "10/08"
・
・
Case 7
TSUKI1 = "10/10"
End Select
DoCmd.RunSQL "UPDATE 祝日 SET 祝日.祝日 = '" & TSUKI1 & "'" & " WHERE 祝日.祝日コード = " & 11 & ";" 祝日テーブルの祝日コード11の祝日を書き換えます。
End If
End Function
■春分の日、秋分の日のVBAについて
下記の略算式を用い春分の日を求めます。
Accessのモジュールに以下を入力します。
Public Function Syunbun (k As Date)
Syunbun = "03/" & Int(20.7734 + 0.242194 * (Year(k) - 1988) - Int((Year(k) - 1988) / 4))
祝日テーブルの祝日コード4(春分の日)の祝日を書き換えます。
DoCmd.RunSQL "UPDATE 祝日 SET 祝日.祝日 = '" & Syunbun & "'" & " WHERE 祝日.祝日コード = " & 4 & ";"
End Function
下記の略算式を用い秋分の日を求めます。
Public Function Syubun (k As Date)
Syubun = "09/" & Int(23.2148 + 0.242194 * (Year(k) - 1988) - Int((Year(k) - 1988) / 4))
祝日テーブルの祝日コード11(秋分の日)の祝日を書き換えます。
DoCmd.RunSQL "UPDATE 祝日 SET 祝日.祝日 = '" & Syubun & "'" & " WHERE 祝日.祝日コード = " & 10 & ";"
End Function
使用方法
年度表示が変わる都度 KOSHIN Syunbun Syubun の3っの関数を実行します。
応用問題
1っの関数にしてみよう。
[戻る]