ワークシート上に埋め込みグラフを作る操作をマクロ記録すると、次のようなコードが記録されます。
Sub Macro1()
Charts.Add
ActiveChart.ChartType = xlColumnClustered
ActiveChart.SetSourceData Source:=Sheets("Sheet1").Range("A1:B3")
ActiveChart.Location Where:=xlLocationAsObject, Name:="Sheet1"
End Sub
ここでは、セル範囲A1:B3に下図のようなグラフの元データが入力されているものとし、Sheet1の埋め込みグラフとして作成しました。
記録されたコードの先頭にある「Charts.Add」は、Chartsコレクションに新しいグラフ(Chart)を追加せよという命令で、Worksheets.Addと似ています。
ここで使用したChartsコレクションとは、グラフシートのコレクションです。
試しに「Charts.Add」だけを実行すると、新しいグラフシートが作成されます。
マクロ記録では、まず新しいグラフシートを挿入し、そこに指定したセル範囲からグラフを作り、最後にグラフシートを「ワークシート上の埋め込みグラフ」に移動しています。
最後の .Location Where:=xlLocationAsObject, Name:="Sheet1" が移動している箇所です。
もちろんこのコードでもワークシート上に埋め込みグラフを作成できますが、いささか冗長です。
ワークシート上の埋め込みグラフを作成するには、次のようにChartObjectオブジェクトを使う方が便利でしょう。ChartObjectオブジェクトは、ワークシート上の埋め込みグラフを表すオブジェクトです。
Sub Sample1()
ActiveSheet.ChartObjects.Add 30, 50, 300, 200
End Sub
上記のコードは、アクティブシートに埋め込みグラフを挿入します。
ChartObjectsコレクションのAddメソッドでは、必ず4つの引数を指定しなければなりません。
引数はそれぞれ、埋め込みグラフの「左位置,上位置,横幅,高さ」を表しています。
続いて、グラフの種類や、グラフの元になるセル範囲などを指定します。
Sub Sample2()
ActiveSheet.ChartObjects.Add 30, 50, 300, 200
ActiveSheet.ChartObjects(1).Chart.ChartType = xlColumnClustered
ActiveSheet.ChartObjects(1).Chart.SetSourceData Source:=Range("A1:B3")
End Sub
上記のマクロでは「ChartObjects(1)」のように、ワークシート上にある1番目のグラフを特定しています。
挿入したグラフを確実に指定するには、Addメソッドの返り値をオブジェクト変数に格納するか、次のようにWithステートメントを使うといいでしょう。
Sub Sample3()
With ActiveSheet.ChartObjects.Add(30, 50, 300, 200).Chart
.ChartType = xlColumnClustered
.SetSourceData Source:=Range("A1:B3")
End With
End Sub
なお、次のようにすると、セルとリンクしていないグラフを作成することも可能です。
Sub Sample4()
With ActiveSheet.ChartObjects.Add(30, 50, 300, 200).Chart
.ChartType = xlColumnClustered
With .SeriesCollection.NewSeries
.Values = "={30,40,50}"
.Name = "Sample"
.Xvalues = "={""東京"",""横浜"",""大阪""}"
End With
End With
End Sub
Valuesプロパティにはグラフの元になる数値を配列で指定し、Xvaluesプロパティには項目軸に表示する文字列を指定します。