【VBA】グラフを別シートに自動出力する方法(グラフ専用シートの使い方)

データシートとは別に「グラフ専用シート」を用意して、自動でグラフを生成する方法について解説します。
分析用・レポート用シートを分けたい場合に非常に有効です。


1. グラフ専用シートの特徴と使うメリット

グラフ専用シートは、Excel の「Chart シート」と呼ばれる種類のシートで、
1つのシートに1つのグラフだけが配置される特殊なレイアウトです。

メリット

  • 見やすいレイアウトが自動形成される
  • 印刷・PDF 出力に向いている
  • ダッシュボード作成時に整理しやすい
  • グラフのサイズ調整を気にしなくてよい

2. グラフ専用シートを VBA で作成する基本構文

グラフ専用シートを作成する場合は、
Charts.Add を使うか、ChartObjects で作成した後に Location で移動します。

● 最もシンプルな方法(Charts.Add)

Sub CreateChartSheetSimple()
    Charts.Add
    ActiveChart.ChartType = xlColumnClustered
    ActiveChart.SetSourceData Source:=Sheets("Data").Range("A1:B10")
    ActiveChart.Location Where:=xlLocationAsNewSheet, Name:="売上グラフ"
End Sub

3. 既存データからグラフ専用シートを作る(安全な実装)

運用では、「同名のグラフシートがあれば削除する」などの処理を入れる方が安全です。

Sub CreateChartSheet()
    Dim wsData As Worksheet
    Dim rg As Range
    Dim cht As Chart
    Dim chartName As String

    chartName = "売上グラフ"
    Set wsData = Sheets("Data")
    Set rg = wsData.Range("A1:B10")

    '同名のグラフシートが存在すれば削除
    On Error Resume Next
    Application.DisplayAlerts = False
    Sheets(chartName).Delete
    Application.DisplayAlerts = True
    On Error GoTo 0

    'グラフ専用シートの作成
    Set cht = Charts.Add
    cht.ChartType = xlColumnClustered
    cht.SetSourceData Source:=rg
    cht.Location Where:=xlLocationAsNewSheet, Name:=chartName
End Sub

ポイント

  • グラフ専用シートは Chart オブジェクト
  • Location メソッドにより「通常シート→チャートシート」へ変換される
  • Name を指定すれば、識別しやすいグラフ管理が可能

4. 既存のグラフをグラフ専用シートに移動する方法

普通のシートにあるグラフを後から専用シートに移動することもできます。

Sub MoveChartToSheet()
    Dim co As ChartObject
    Dim cht As Chart
    Dim chartName As String

    chartName = "月次売上グラフ"

    'Sheet1 上の 1つ目のグラフを取得
    Set co = Sheets("Sheet1").ChartObjects(1)
    Set cht = co.Chart

    '専用シートへ移動
    cht.Location Where:=xlLocationAsNewSheet, Name:=chartName
End Sub

5. 複数のグラフを一括して専用シートへ出力する

例えば「支店別」「商品別」など、複数の項目をループで処理して、
それぞれ別のグラフ専用シートを作成することもできます。

Sub CreateMultipleChartSheets()
    Dim ws As Worksheet
    Dim i As Long
    Dim lastCol As Long
    Dim cht As Chart
    Dim chartName As String

    Set ws = Sheets("Data")
    lastCol = ws.Cells(1, Columns.Count).End(xlToLeft).Column

    For i = 2 To lastCol

        chartName = ws.Cells(1, i).Value & "_グラフ"

        '同名のシート削除
        On Error Resume Next
        Application.DisplayAlerts = False
        Sheets(chartName).Delete
        Application.DisplayAlerts = True
        On Error GoTo 0

        'グラフ作成
        Set cht = Charts.Add
        cht.ChartType = xlLine
        cht.SetSourceData Source:=ws.Range(ws.Cells(1, 1), ws.Cells(ws.Rows.Count, i).End(xlUp))
        cht.Location Where:=xlLocationAsNewSheet, Name:=chartName
    Next i
End Sub

6. まとめ

グラフ専用シートを使うと…

  • レポート形式の資料に使いやすい
  • グラフのレイアウト調整が不要
  • 複数のグラフを管理しやすい

といったメリットがあります。

コメント

タイトルとURLをコピーしました