スポンサーリンク

Accessでのグラフ活用を極める!内蔵チャートの限界と実務で使える工夫

スポンサーリンク
Access
スポンサーリンク

こんにちは、業務改善オタクの「なかぜん」です。
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レポートにグラフを載せて印刷活用

これからも、なかぜんと一緒に業務改善の引き出しを増やしていきましょう!