こんにちは、業務改善オタクの「なかぜん」です。
Accessで作り込んだデータベース、そこに「視覚的なグラフを表示したい」と思ったことはありませんか?
でも…
- 思ったようにグラフが動かない
- チャートの設定が細かくできない
- Excelみたいにカスタマイズできない…
そんな悩み、私もたくさん経験してきました。
今回は「Access内でグラフやチャートを使う際の限界」と「それでも実務で使えるように工夫する方法」について、実践的に解説していきます。
Accessで使えるグラフとは
フォーム・レポートに配置できる「グラフコントロール」
Accessには、フォームやレポート上に「Microsoft Graph Chart」または「Modern Chart(新しいチャート)」を配置する機能があります。
- Access 2016以前:Microsoft Graph
- Access 2019以降:Modern Chart(モダンチャート)が登場
ですが、どちらにも一長一短があり、「実務にガッツリ使う」にはやや厳しい場面もあります。
Accessチャートの限界と問題点
1. グラフデザインの柔軟性が低い
Excelのような詳細なレイアウト設定(ラベル間隔や系列ごとのスタイル変更など)は、Access内蔵グラフでは難しいです。
2. リアルタイム更新に弱い
フォームでデータを入力しても、グラフに即反映されないことがあります。再描画が必要だったり、イベントが発火しなかったりと面倒です。
3. デザインビューで壊れやすい
グラフを編集しようとすると「オブジェクトが破損する」ことがしばしば。特にGraphは古いため、バージョン差異で動かなくなることもあります。
VBAでグラフをリフレッシュする工夫
フォーム内グラフの更新コード例
' フォームのAfterUpdateイベントなどで呼び出し
Private Sub RefreshChart()
Me!グラフコントロール名.Requery
End Sub
解説:
フォーム上にあるグラフオブジェクト(たとえば「cht売上推移」など)を明示的に再クエリ(Requery)します。これにより、最新のデータがチャートに反映されます。
クエリの結果に応じた動的データ範囲の変更
グラフのRowSourceにSQL文字列を直接渡して変更する方法もあります。
Dim strSQL As String
strSQL = "SELECT 商品名, 売上金額 FROM Q_月次売上 WHERE 売上月 = #" & Format(Date, "yyyy/mm") & "#"
Me!cht売上推移.RowSource = strSQL
Me!cht売上推移.Requery
解説:
月ごとの売上グラフを表示する際に、現在月に応じてクエリの条件を組み替えています。こうすることで、「月が変わってもグラフが自動対応」します。
代替手段:Access+Excelで見せる
Excelでグラフを作り、Accessからデータ連携する
「グラフだけはExcelに任せる」のも一つの手。以下のようなVBAで、AccessからExcelファイルにデータを書き出してグラフを表示する方法もあります。
Dim xlApp As Object
Dim xlBook As Object
Dim xlSheet As Object
Set xlApp = CreateObject("Excel.Application")
Set xlBook = xlApp.Workbooks.Open("C:\テンプレート\売上推移テンプレート.xlsx")
Set xlSheet = xlBook.Sheets("グラフ")
xlApp.Visible = True
' Accessのデータを貼り付け(例:ADOで取得してRangeへ)
xlSheet.Range("A2").CopyFromRecordset rst
xlBook.RefreshAll
解説:
Accessで抽出した売上データをExcelへ貼り付けることで、既に作成済みのExcelグラフが自動で更新される仕組みです。グラフの編集はExcel側で自在にできます。
注意点とよくあるミス
- グラフのRowSourceが壊れる: フォームをコピー・貼り付けすると、グラフのデータソースが消えることがあります。
- Modern ChartでVBA操作が限定的: VBAからプロパティを直接制御できないため、従来のGraphよりも手間がかかる場面があります。
- 更新タイミングに注意: AfterUpdateやForm_Currentなど、適切なイベントでRequeryをしないと、グラフが正しく反映されません。
応用テクニック:複数系列の動的切り替え
ユーザーが「月別」「部門別」「商品別」など、表示軸をボタンで切り替えられる仕組みも作れます。
' コマンドボタンに応じてSQLを切り替える
Private Sub btn表示月別_Click()
Me!cht売上推移.RowSource = "SELECT 月, 合計金額 FROM Q_月別売上"
Me!cht売上推移.Requery
End Sub
Private Sub btn表示商品別_Click()
Me!cht売上推移.RowSource = "SELECT 商品名, 合計金額 FROM Q_商品別売上"
Me!cht売上推移.Requery
End Sub
実務的な使いどころ:
「グラフで視点を切り替えて分析したい」場合、ボタンひとつで切り替えるUIは大変便利です。
まとめ:Access内グラフの限界を理解し、工夫で乗り切る
Access内蔵のグラフ機能は、確かにExcelほどの自由度はありません。
でも、VBAでのRequery制御や、RowSourceの動的切り替え、さらにはExcel連携を活用すれば、実務でも十分に通用するビジュアル表現が可能です。
「Accessではグラフは無理」と諦める前に、一工夫してみませんか?
次のステップ:
- Excel連携の自動化(出力テンプレート化)にチャレンジ
- Modern Chartの限界と活用の検証
- Accessレポートにグラフを載せて印刷活用
これからも、なかぜんと一緒に業務改善の引き出しを増やしていきましょう!
