即効テクニック |
ワークシート上に埋め込みグラフを作る操作をマクロ記録すると、次のようなコードが記録されます。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 SubValuesプロパティにはグラフの元になる数値を配列で指定し、Xvaluesプロパティには項目軸に表示する文字列を指定します。