PR
グラフ

【ExcelVBA】ワークシートへグラフを挿入する

ワークシートの埋め込みグラフをVBAを使用して挿入する場合、AddChartメソッドを使用します。引数としてグラフの位置とサイズを指定(※)することができます。

※グラフの位置とサイズは数値(単位:pt)もしくはセルの位置(TopやLeft)等で指定できます。

AddChartメソッドを実行してグラフを挿入する

AddChart実行時にグラフ化をする範囲を指定していない場合、アクティブセルを含むセル範囲からグラフが作成されますので、グラフ化したいセルを選択もしくは指定をしておく必要があります。

object.AddChart Height ,Left ,Top ,Width
・Height・・・グラフの高さ(単位:pt)
・Left・・・グラフの左端部の横方向の位置(単位:pt)
・Top・・・グラフの上端部の縦方向の位置(単位:pt)
・Width・・・グラフの幅(単位:pt)
Sub chart_add_3()

Range("A1").Select 'グラフ化したいセルを選択しておく

ActiveSheet.Shapes.AddChart 200, 50, 150, 400 'Height ,Left ,Top ,Width

End Sub

参照範囲を指定してグラフを挿入する

表の全体ではなく、指定したセルの範囲内だけをグラフ化したい場合はグラフ作成後に.SetSourceDataメソッドを使用して参照範囲を指定することができます。

今回の事例としては(A1:D7)の範囲ではなく、(A1:D6)の範囲をグラフ化対象の範囲として、合計の欄を入れないグラフへ変更します。

まず、グラフの参照範囲変更にあたって、挿入したグラフのインデックスを指定して処理を実行する必要があるため、挿入したグラフのインデックスを取得します。

今回は挿入したグラフが対象であるため、ワークシート内にあるグラフの数がそのままインデックスの値となります。

インデックス = ActiveSheet.ChartObjects.Count

インデックスを取得できましたので、グラフの参照範囲を指定します。

 ActiveSheet.ChartObjects(インデックス).Chart.SetSourceData Range("A1:D6")

グラフ範囲を指定した場合のコードは以下の通りです。

Sub chart_add_3()

Dim インデックス as long

Range("A1").Select

ActiveSheet.Shapes.AddChart 200, 50, 150, 400  'Height ,Left ,Top ,Width

'挿入したグラフのインデックスを取得する
インデックス = ActiveSheet.ChartObjects.Count

ActiveSheet.ChartObjects(インデックス).Chart.SetSourceData Range("A1:D6")

End Sub

マクロ実行結果、Range(“A1:D6”)の参照範囲のグラフへ変更できました。

挿入するグラフの位置とサイズをセルで指定する

グラフの挿入後に位置やサイズを調整せずに済むように、位置とサイズとセルの情報を元に指定する場合はAddChartメソッドの引数をピクセル単位の数値(単位:pt)ではなく、Rangeオブジェクトを使用することで指定できます。

例えば、セル”C9:H13”の範囲にグラフを挿入する場合の下のコードのように、Rangeオブジェクトの「Left」「Top」「Width」「Height」プロパティで表現しています。

AddChartの各引数に対して数値で指定できていれば問題ないので、Leftの引数は必ずしもセルのLeftプロパティである必要はありません。

Sub chart_add_4()

Dim Count_Chart As Long

'空のグラフを挿入する
ActiveSheet.Shapes.AddChart Left:=Range("C9").Left, _
                            Top:=Range("D5").Top, _
                            Width:=Range("C9:H9").Width, _
                            Height:=Range("D5:D13").Height

'挿入したグラフのインデックスを取得する
Count_Chart = ActiveSheet.ChartObjects.Count

'グラフの種類を集合縦棒グラフで設定する
With ActiveSheet.ChartObjects(Count_Chart).Chart
    .ChartType = xlColumnClustered
    .SetSourceData Range("A1:D6")
End With

End Sub

マクロの実行結果、グラフは下の図の位置に挿入されます。(グラフの元データは非表示にしています)

ChartObjectを使用してグラフを挿入する

グラフを挿入する場合にグラフをChartObjectとして取得することでグラフのプロパティを変更することもできます。

Sub chart_add_5()

Dim objChart As ChartObject

'空のグラフを挿入してグラフオブジェクトとして取得する
Set objChart = ActiveSheet.ChartObjects.Add( _
                            Range("B9").Left, _
                            Range("D9").Top, _
                            Range("B9:G9").Width, _
                            Range("D9:D15").Height _
                            )
'挿入したグラフを選択する
objChart.Select

'グラフの種類を集合縦棒グラフで設定する
objChart.Chart.ChartType = xlColumnClustered

'グラフの参照データを指定する
ActiveChart.SetSourceData Range("A1:D6")

End Sub

マクロ実行結果は下の図です。

コメント