📊 Excel VBA Top100
⚡

CreateChart

自動化

選択範囲のデータから棒グラフを作成します

選択したデータ範囲からグラフを自動生成するマクロです。グラフの種類(棒グラフ・折れ線グラフ・円グラフなど)・タイトル・位置をダイアログで指定するだけで、適切なグラフが即座に作成されます。Excelのグラフ作成ウィザードを使うよりも少ない操作でグラフを生成でき、同じ形式のグラフを繰り返し作成する業務の自動化に最適です。データが更新されるたびにグラフを作り直す作業の手間を大幅に削減できます。内部ではChartObjects.Addでグラフオブジェクトを配置し、SetSourceDataメソッドでデータ範囲を紐付けています。UpdateAllChartsと組み合わせれば、初回作成はCreateChart・以降の更新はUpdateAllChartsという役割分担で、グラフ運用のライフサイクル全体を自動化できます。

CreateChart デモ

📖 使い方

  1. VBAエディタを開く(Alt + F11)
  2. モジュールを挿入(挿入 > モジュール)
  3. 下記VBAコードをコピー&ペースト
  4. ブック上で実行(Alt + F8 でマクロ選択)
💡 実行例: グラフにしたいデータ範囲を選択してから CreateChart を実行します

🎯 活用シーン

  • ✓毎月の売上データから同じ形式の棒グラフと折れ線グラフを自動生成して、月次報告書の作成を自動化したいとき
  • ✓KPIダッシュボードのグラフを最新データで一括更新する処理を自動化して、毎週の更新作業を省力化したいとき
  • ✓複数のシートから同じ形式のグラフを一括生成して、大量のデータを視覚化した報告書を効率よく作成したいとき
  • ✓営業部門ごとの売上推移グラフを、同一フォーマットで毎月自動生成したいとき
  • ✓アンケート結果の集計後に円グラフを自動作成し、報告資料への貼り付け作業を省略したいとき

💡 実装のヒント

  • ▸グラフのデータ範囲はコード内で指定することも、実行時にユーザーが範囲を選択して指定することもできます。
  • ▸グラフのスタイル・色・凡例の位置・軸ラベルなど詳細なデザインはグラフオブジェクトのプロパティで設定できます。会社標準のグラフデザインをマクロに組み込むと毎回一貫したグラフが作れます。
  • ▸既存のグラフを更新したい場合は、グラフオブジェクトを取得してデータ範囲を差し替える処理を使用してください。
  • ▸同じ形式のグラフを複数シートに量産したい場合は、作成済みグラフをテンプレートとしてコピーする方法も高速です。
  • ▸グラフの種類(xlColumnClustered、xlLineなど)を引数化しておくと、用途に応じて呼び分けが可能になります。

💻 VBAコード

' CreateChart
' -----------------
' Macro Name: CreateChart
' Description: 選択範囲のデータから棒グラフを作成します
' Parameters: なし
' Returns: なし
' Usage: グラフにしたいデータ範囲を選択してから CreateChart を実行します
' -----------------

Sub CreateChart()
    On Error GoTo ErrorHandler

    Dim rng As Range
    Dim chartObj As ChartObject
    Dim ws As Worksheet

    If TypeName(Selection) <> "Range" Then
        MsgBox "データ範囲を選択してから実行してください", vbCritical, "エラー"
        Exit Sub
    End If

    Set rng = Selection
    Set ws = ActiveSheet

    Set chartObj = ws.ChartObjects.Add( _
        Left:=rng.Left, _
        Top:=rng.Top + rng.Height + 10, _
        Width:=400, _
        Height:=250)

    With chartObj.Chart
        .SetSourceData Source:=rng
        .ChartType = xlColumnClustered
        .HasTitle = True
        .ChartTitle.Text = "グラフ"
    End With

    MsgBox "棒グラフを作成しました", vbInformation, "完了"

    Exit Sub

ErrorHandler:
    MsgBox "エラーが発生しました:" & vbCrLf & Err.Description, vbCritical, "エラー"
End Sub