Excel 2007で、棒グラフを作るには、次のようにします。
Sub Sample() ActiveSheet.Shapes.AddChart.Chart.ChartType = xlColumnClustered End Sub
ChartTypeプロパティに設定できる定数(グラフの種類)は、次のページを参考にしてください。
「ActiveSheet.Shapes.AddChart」は、アクティブセルを含むデータ範囲でグラフを作成しますので、上記のマクロを実行するときは、あらかじめアクティブセルをデータ範囲内に移動しておくといいでしょう。あるいは、次のように、グラフを作成してからデータ範囲を指定することも可能です。
Sub Sample() With ActiveSheet.Shapes.AddChart.Chart .ChartType = xlColumnClustered .SetSourceData Range("A1:D4") End With End Sub
Excel 2003で棒グラフの作成をマクロ記録すると、次のようなコードが記録されます。
Sub Macro() Charts.Add ActiveChart.ChartType = xlColumnClustered ActiveChart.SetSourceData Source:=Sheets("Sheet1").Range("A1:D4") ActiveChart.Location Where:=xlLocationAsObject, Name:="Sheet1" End Sub
このコードは、Excel 2007でも同じように動作します。
余談ですが、Excel 2003までのグラフ作成では、
という2段階の手順になります。したがって、マクロ記録で記録されたコードをもとにするとき、次のようにデータ範囲の指定でワークシートを省略するとエラーになります。
Sub Macro() Charts.Add ActiveChart.ChartType = xlColumnClustered ActiveChart.SetSourceData Source:=Range("A1:D4") ActiveChart.Location Where:=xlLocationAsObject, Name:="Sheet1" End Sub
冒頭の「Charts.Add」を実行すると、新しいグラフがグラフシートに作成され、アクティブシートは、そのグラフシートになります。アクティブシートがグラフシートなのですから「Range("A1:D4")」とシートの指定を省略すると「グラフシートのRange("A1:D4")」という意味になり、そんなセルはないよ!というエラーです。
ワークシートの埋め込みグラフを作成するときは、たとえば次のように、グラフを埋め込みグラフにしてから、データ範囲を指定します。
Sub Macro() Charts.Add ActiveChart.ChartType = xlColumnClustered ActiveChart.Location Where:=xlLocationAsObject, Name:="Sheet1" ActiveChart.SetSourceData Source:=Range("A1:D4") End Sub
あるいは、次のように、グラフを埋め込むワークシートを特定することもできますね。
Sub Macro() With ActiveSheet Charts.Add ActiveChart.ChartType = xlColumnClustered ActiveChart.SetSourceData Source:=.Range("A1:D4") ActiveChart.Location Where:=xlLocationAsObject, Name:=.Name End With End Sub