月別グラフの作成-データのない日も表示する
テーブルの準備
下のような2個のテーブルを用意しました。
「Tサンプル」は生データが入ったテーブルです。
「WTサンプル」はグラフに表示するデータを「Tサンプル」から取り込むためのテーブルです。
フォームの準備
下のような2個のコンボボックスと2個のラベルおよび1個のボタンを配置したフォームを作成しました。
「デザイン」タブの「グラフ」をクリックし、作成したフォームに配置します。
「グラフウィザード」が開くので「テーブル:WTサンプル」を選んで「次へ」をクリックします。
「日付」と「数量」を「選択したフィールド」に移して「次へ」をクリックします。
「縦棒グラフ」を選んで「次へ」をクリックします。
「月ごとの日付」をダブルクリックし、「グループ化の設定」で「日」を選んで「OK」をクリックし、「次へ」をクリックします。
グラフのタイトルを必要に応じて入力し、凡例の表示、非表示を選択し、「完了」をクリックします。
作成したグラフの名前は「chart」としました。
コードの記述
標準モジュールに下記コードを記述します。
Public intYear As Integer Public intMonth As Integer Public Sub SetLastDay(ByVal Y As Integer, ByVal M As Integer) DoCmd.SetWarnings False DoCmd.RunSQL "DELETE FROM WTサンプル" DoCmd.RunSQL "INSERT INTO WTサンプル SELECT 日付,数量 FROM Qサンプル" DoCmd.SetWarnings True Dim i As Integer Dim LastDay As Integer LastDay = Day(DateSerial(Y, M + 1, 1) - 1) Dim w_rs As Recordset Set w_rs = CurrentDb.OpenRecordset("WTサンプル", dbOpenDynaset) If w_rs.RecordCount <> 0 Then For i = Day(DMin("日付", "WTサンプル")) - 1 To 1 Step -1 w_rs.AddNew w_rs![日付] = DateSerial(Y, M, i) w_rs![数量] = 0 w_rs.Update Next For i = Day(DMax("日付", "WTサンプル")) + 1 To LastDay w_rs.AddNew w_rs![日付] = DateSerial(Y, M, i) w_rs![数量] = 0 w_rs.Update Next End If w_rs.Close Set w_rs = Nothing End Sub Public Function GetYear() As Integer GetYear = intYear End Function Public Function GetMonth() As Integer GetMonth = intMonth End Function Public Sub SetComboBoxYear(ByVal fm As Form, ByVal strName As String) Dim i As Integer Dim cb As ComboBox Set cb = fm.Controls(strName) For i = cb.ListCount - 1 To 0 Step -1 cb.RemoveItem i Next For i = Year(Date) To Year(Date) - 3 Step -1 cb.AddItem i Next End Sub Public Sub SetComboBoxMonth(ByVal fm As Form, ByVal strName As String) Dim i As Integer Dim cb As ComboBox Set cb = fm.Controls(strName) For i = cb.ListCount - 1 To 0 Step -1 cb.RemoveItem i Next For i = 1 To 12 cb.AddItem i Next End Sub
フォームの読み込み時イベントプロシージャに下記コードを記述します。
Private Sub Form_Load() Call SetComboBoxYear(Me, "cboYear") Call SetComboBoxMonth(Me, "cboMonth") cboYear = Year(Date) cboMonth = Month(Date) btnUpdate_Click End Sub
ボタンのクリック時イベントプロシージャに下記コードを記述します。
Private Sub btnUpdate_Click() intYear = Nz(cboYear) intMonth = Nz(cboMonth) Call SetLastDay(intYear, intMonth) Me.chart.Requery End Sub
選択クエリの作成
下のような選択クエリを作成します。
グラフオプションの設定
フォームのデザインビューでグラフをダブルクリックするとグラフの編集画面が現れます。
その画面のグラフを右クリックし、「グラフのオプション」を選択します。
「軸」タブの「X/項目軸」で「時系列」を選択するとデータがない日もグラフ表示されます。「項目」を選択するとデータのない日は表示されません。
使用方法
「年」と「月」を選択して「更新」ボタンをクリックするとグラフが表示されます。