Excel VBA でワークシート上にグラフオブジェクトを挿入する方法

Shapes.AddChart2 メソッドの基本と活用例 —

目次

概要

Excel では、ワークシート上に直接配置する グラフオブジェクト(埋め込みグラフ) を VBA から作成できます。Shapes.AddChart2 メソッドを用いると、ブック末尾にグラフ専用シートを追加することなく、セル範囲の上にグラフを挿入し、名前やレイアウトを自由に設定できます。本記事では、売上推移を可視化する棒グラフを例に、コードの流れとポイントを丁寧に解説いたします。


前提条件

項目内容
対応 ExcelMicrosoft 365 または 2016 以降
元データシート DataSheet の B3:C14(列見出しを含む)
作成場所同シート上(セル E3 付近に配置)
マクロ配置標準モジュール

VBA サンプルコード

Sub InsertEmbeddedChart()

    Dim ws           As Worksheet      ' グラフを挿入するシート
    Dim chartShape   As Shape          ' 生成されるグラフオブジェクト
    Dim chartObject  As Chart          ' グラフ本体
    Dim dataRange    As Range          ' グラフの元データ範囲
    
    '--- 対象シートとデータ範囲を設定 ---
    Set ws = Worksheets("DataSheet")
    Set dataRange = ws.Range("B3:C14")         ' 日付列と売上列
    
    '--- グラフオブジェクトを挿入 ---
    Set chartShape = ws.Shapes.AddChart2( _
        Style:=201, _                          ' グラフスタイル(任意)
        X:=ws.Range("E3").Left, _              ' 左位置
        Y:=ws.Range("E3").Top, _               ' 上位置
        Width:=350, _                          ' グラフ幅
        Height:=250)                           ' グラフ高さ
    
    '--- グラフ名を設定 ---
    chartShape.Name = "SalesChartObj"
    
    '--- グラフ本体を取得し、タイプとデータ範囲を設定 ---
    Set chartObject = chartShape.Chart
    With chartObject
        .ChartType = xlColumnClustered         ' 集合縦棒
        .SetSourceData Source:=dataRange       ' データ系列を設定
        
        '--- タイトルと軸ラベルを追加 ---
        .HasTitle = True
        .ChartTitle.Text = "Monthly Sales"
        .Axes(xlCategory).HasTitle = True
        .Axes(xlCategory).AxisTitle.Text = "Month"
        .Axes(xlValue).HasTitle = True
        .Axes(xlValue).AxisTitle.Text = "Amount (USD)"
    End With
    
    '--- 処理完了メッセージ ---
    MsgBox "埋め込みグラフ「" & chartShape.Name & "」を作成しました。", _
           vbInformation, "Chart Creation"

End Sub

コード解説

解説
9–10dataRange にグラフの元データを設定いたします。見出し行を含めた範囲を指定してください。
13–18AddChart2 でグラフオブジェクトを挿入し、XY にセルの LeftTop プロパティを用いて配置位置を指定しています。
21chartShape.Name でオブジェクト名を SalesChartObj に変更しています。
24–32ChartType集合縦棒 (xlColumnClustered) を選択し、SetSourceData でデータ範囲を系列化しています。
26–31タイトルと軸ラベルを追加して読みやすさを向上させています。

応用ポイント

目的実装のヒント
折れ線グラフへ変更.ChartType = xlLine としてください。
グラフ位置をセル合わせで固定chartShape.Placement = xlFreeFloatingxlMoveAndSize へ変更するとセル幅変更に追従します。
複数系列を個別設定.SeriesCollection.NewSeries を利用し、ValuesXValues を列ごとに指定します。

よくある質問

質問回答
グラフオブジェクトを削除したい場合はどうすればよいですか。ws.Shapes("SalesChartObj").Delete で削除できます。
既存オブジェクト名と重複した際の対処は。事前に On Error Resume NextErr.Clear を用い、存在チェック後にリネームか削除を実施してください。

まとめ

Shapes.AddChart2 を用いると、セル範囲の上に直接グラフオブジェクトを配置し、名称・サイズ・データ・書式を一括設定できます。埋め込みグラフはレイアウト自由度が高く、ダッシュボード作成やシンプルなレポートに最適です。ぜひ日常業務の可視化にお役立てください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次