— Shapes.AddChart2
メソッドの基本と活用例 —
目次
概要
Excel では、ワークシート上に直接配置する グラフオブジェクト(埋め込みグラフ) を VBA から作成できます。Shapes.AddChart2
メソッドを用いると、ブック末尾にグラフ専用シートを追加することなく、セル範囲の上にグラフを挿入し、名前やレイアウトを自由に設定できます。本記事では、売上推移を可視化する棒グラフを例に、コードの流れとポイントを丁寧に解説いたします。
前提条件
項目 | 内容 |
---|---|
対応 Excel | Microsoft 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–10 | dataRange にグラフの元データを設定いたします。見出し行を含めた範囲を指定してください。 |
13–18 | AddChart2 でグラフオブジェクトを挿入し、X と Y にセルの Left ・Top プロパティを用いて配置位置を指定しています。 |
21 | chartShape.Name でオブジェクト名を SalesChartObj に変更しています。 |
24–32 | ChartType に 集合縦棒 (xlColumnClustered) を選択し、SetSourceData でデータ範囲を系列化しています。 |
26–31 | タイトルと軸ラベルを追加して読みやすさを向上させています。 |
応用ポイント
目的 | 実装のヒント |
---|---|
折れ線グラフへ変更 | .ChartType = xlLine としてください。 |
グラフ位置をセル合わせで固定 | chartShape.Placement = xlFreeFloating を xlMoveAndSize へ変更するとセル幅変更に追従します。 |
複数系列を個別設定 | .SeriesCollection.NewSeries を利用し、Values と XValues を列ごとに指定します。 |
よくある質問
質問 | 回答 |
---|---|
グラフオブジェクトを削除したい場合はどうすればよいですか。 | ws.Shapes("SalesChartObj").Delete で削除できます。 |
既存オブジェクト名と重複した際の対処は。 | 事前に On Error Resume Next と Err.Clear を用い、存在チェック後にリネームか削除を実施してください。 |
まとめ
Shapes.AddChart2
を用いると、セル範囲の上に直接グラフオブジェクトを配置し、名称・サイズ・データ・書式を一括設定できます。埋め込みグラフはレイアウト自由度が高く、ダッシュボード作成やシンプルなレポートに最適です。ぜひ日常業務の可視化にお役立てください。