棒グラフを作る


棒グラフとは棒のグラフです

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のコードは動くか

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までのグラフ作成では、

  1. まず、グラフシートに新しいグラフを作成する
  2. 次に、そのグラフをワークシートに移動する

という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