accessでカレンダーテーブルの作成をさらに深掘りしてみます
前回のカレンダーテーブルは連番、日付、曜日を取得してテーブルに格納しました。そして今回は他に通年日と通年週と四半期を追加し、さらにテーブルへの追加をSQLからVBAにして作成します。また、accessの構成はカレンダテーブルとデータを作成するための標準モジュールのVBAのみでシンプルに作成しています。
■作成するテーブルの構成です
先に述べたとおり連番、日付、曜日、通年日、通年週、四半期を格納していきます。
■VBAの記述内容です
Sub カレンダ作成()
DoCmd.SetWarnings False
DoCmd.RunSQL "DELETE FROM カレンダテーブル"
Dim db As Database
Dim rst As Recordset
Dim d As Date
Dim dstt As Date
Dim dend As Date
Dim no As Long
no = 1
dstt = #1/1/2023#
dend = #12/31/2023#
Set db = CurrentDb
Set rst = db.OpenRecordset("カレンダテーブル")
With rst
For d = dstt To dend
.AddNew
!連番 = no
!日付 = d
!曜日 = Format(d, "aaa")
!通年日 = Format(d, "y")
!通年週 = Format(d, "ww")
!四半期 = Format(d, "q")
.Update
no = no + 1
Next d
End With
rst.Close
Set rs = Nothing
End Sub
■ポイント解説
'はじめに都度テーブル内容を削除しておきます
DoCmd.RunSQL "DELETE FROM カレンダテーブル"
Dim d As Date '日付
Dim dstt As Date '期間始まりの日付
Dim dend As Date '期間終わりの日付
Dim no As Long '連番を1からにセットする
no = 1
'2023年1月1日から12月31日までの期間のカレンダーを作成します
dstt = #1/1/2023#
dend = #12/31/2023#
'始まりの日付から終わりの日付まで一行ずつ繰り返し追加していきます
'今回はVBAにて.AddNew~.Updateで各項目をテーブルに追加していきます
With rst
For d = dstt To dend
.AddNew
!連番 = no
!日付 = d
!曜日 = Format(d, "aaa")
!通年日 = Format(d, "y")
!通年週 = Format(d, "ww")
!四半期 = Format(d, "q")
.Update
no = no + 1
Next d
End With
■完成したテーブル内容です
テーブルの1行目からの状態
’テーブルの最終行までの状態です
■最後に
今回追加した項目のように、日付からは様々な形のデータをとり出せます。必要に応じて取得したいデータをテーブルに追加してみてください。また、テーブルへの追加はSQLだけでなく今回の.AddNew~.Updateのように追加でき、こちらの方が項目を追加する内容も見やすいかもしれません。これは自身のやりやすい方で書いて良いかと思います。