【Excel VBA】グラフの作成方法(散布図/折れ線)
VBAでグラフを自動作成するのって、意外と難しいですよね。
グラフ難しいなって人のために、グラフを自動作成する基本的な方法と、タイトルなどの各種プロパティの設定方法を紹介します。
この記事はこんな人に向けて書いています。
- VBAでグラフを作りたい
 - グラフの種類を設定したい
 - タイトルを設定したい
 - グラフの位置とサイズを指定したい
 - 軸を設定したい
 - 系列を個別に追加したい
 
VBAでグラフを自動作成する方法

Sub MakeGraph1()
    With ActiveSheet.Shapes.AddChart2.Chart
        .SetSourceData Range("A1:C5")  'データ範囲の指定
    End With
End SubA1~C5セルにデータを入れて、マクロを実行すると上の図のようにグラフが作成されます。
グラフはAddChart2メソッドによって作成されています。
グラフを作った後、下記の部分でグラフのデータ範囲を指定しています。
.SetSourceData Source:=Range("A1:C5") 'データ範囲の指定グラフを作る基本的な方法はこれだけです。
あとは、グラフの種類やタイトル、軸などの設定を行うだけです。
散布図や折れ線グラフを自動作成する方法
Sub MakeGraph2()
    '散布図グラフを作成
    With ActiveSheet.Shapes.AddChart2(, xlXYScatter).Chart
        .SetSourceData Range("A1:C5")
    End With
    '折れ線グラフを作成
    With ActiveSheet.Shapes.AddChart2(, xlLine).Chart
        .SetSourceData Range("A1:C5")
    End With
End SubこのコードではAddChart2の引数にxlXYScatterやxlLineを入れることで、散布図や折れ線グラフを作成しています。(グラフの種類を設定する引数は2つ目です)
xlXYScatter(xlLine)にしたため散布図(折れ線グラフ)になっていますが、ここを変更すればグラフの種類を好きなものにすることができます。
主なグラフの指定方法は次の表のようになります。
| 種類 | ChartType | 
|---|---|
| 棒グラフ | xlColumnClustered | 
| 折れ線 | xlLine | 
| 円グラフ | xlPie | 
| 散布図 | xlXYScatter | 
| 折れ線付き散布図 | xlXYScatterLines | 
| 平滑線付き散布図 | xlXYScatterSmooth | 
グラフのタイトルを設定する方法
Sub MakeGraph3()
    With ActiveSheet.Shapes.AddChart2().Chart
        .SetSourceData Range("A1:C5")
        .HasTitle = True
        .ChartTitle.Text = "タイトル"
    End With
End Subグラフのタイトルを設定したい場合はHasTitleプロパティをTrueにしてから、ChartTitle.Textプロパティにタイトルを設定します。
グラフの位置とサイズを指定する方法

Sub MakeGraph4()
    Dim rng As Range
    Set rng = Range("E1:J10")
    
    With ActiveSheet.Shapes.AddChart2(, , rng.Left, rng.Top, rng.Width, rng.Height).Chart
        .SetSourceData Range("A1:C5")
    End With
End SubAddChart2の引数を指定することでグラフの位置とサイズを指定することができます。(引数は3つ目~6つ目)
サンプルコードではE1:J10と上下左右の一致が重なるように指定しています。
グラフの軸を設定する方法
Sub MakeGraph5()
    With ActiveSheet.Shapes.AddChart2().Chart
        .SetSourceData Range("A1:C5")
        
        '縦軸
        With .Axes(xlValue)
            '軸ラベルを設定
            .HasTitle = True
            .AxisTitle.Caption = "縦軸ラベル"
            
            '最大値/最小値を設定
            .MinimumScale = 0
            .MaximumScale = 2000
            
            '目盛間隔を設定
            .MajorUnit = 1000
            
            '表示形式を設定
            .TickLabels.NumberFormatLocal = "#,###"
        End With
        
        '横軸
        With .Axes(xlCategory)
            '縦軸と同様に設定可能
        End With
    End With
End Sub
グラフのタイトルを設定したい場合は、Axesメソッドを使用して軸のオブジェクト(Axisオブジェクト)を取得します。
Axes(xlValue)とすると縦軸の、Axes(xlCategory)とすると横軸のオブジェクトが取得できます。
上のサンプルコードでは軸ラベル、最大値/最小値、目盛間隔、表示形式を設定する方法を記載しています。
Axisオブジェクトには多くのプロパティが存在するため、これ以外の設定を行いたい場合は、Axisオブジェクトのドキュメントから目的のプロパティを探してみて下さい。
系列を個別に追加する方法
ここまでのサンプルマクロではデータを横軸、縦軸含めてすべてRange(“A1:C5")に設定してきました。
データが綺麗に並んでいればいいのですが、そうでない時もあるかもしれません。
そうした場合は、.SetSourceData Source:=Range(“A1:C5")のように一気にデータ範囲を取得することができません。
その場合は、次のサンプルコードのように系列を個別に追加する必要があります。
Sub MakeGraph6()
    
    With ActiveSheet.Shapes.AddChart2().Chart
        
        '新しい系列を追加
        With .SeriesCollection.NewSeries
            '横軸のデータ
            .XValues = Range("A2:A5")
            '縦軸のデータ
            .Values = Range("B2:B5")
        End With
    End With
End SubこのコードではSeriesCollectionで系列のコレクションを取得し、NewSeriesメソッドで新しい系列を個別に追加しています。
この方法ならば、横軸、縦軸のデータ位置をピンポイントで指定することができます。
(例えば、横軸のデータが右の方にあっても指定ができます)
円グラフの色を変える方法

ここでは円グラフの色を変える方法を紹介します。
ほとんどのグラフは系列(Seriesオブジェクト)のプロパティで色を変更すれば良いのですが、円グラフの色を変える方法は少し異なるやり方が必要になります。
Sub CircleGraphColor()
    'アクティブな円グラフの色を変える
    
    'SeriesオブジェクトのPointsプロパティで色を変える
    With ActiveChart.SeriesCollection(1)
        .Points(1).Interior.Color = vbBlack
        .Points(2).Interior.Color = vbRed
        .Points(3).Interior.Color = vbGreen
        .Points(4).Interior.Color = vbYellow
        .Points(5).Interior.Color = vbBlue
        .Points(6).Interior.Color = vbMagenta
        .Points(7).Interior.Color = vbCyan
        .Points(8).Interior.Color = vbWhite
    End With
    
End Sub円グラフをアクティブな状態にしてサンプルコードを実行すると上の画像のようにグラフの色を変えることができます。(円グラフのデータは8個以上にしてください)
円グラフの系列は普通1つだけなので、系列(Seriesオブジェクト)のプロパティで色を変更するとすべての色が変更されてしまいます。
そのため、系列ではなく、その配下にあるPointsオブジェクトの色を変更する必要があります。
サンプルコードにあるPoints(1)が1つ目のデータに、Points(8)が8個目のデータに対応します。(もちろんデータが9個以上あればPoints(9)が対応します)
このPointオブジェクトが1つ1つのデータに対応していて、PointオブジェクトのInterior.Colorプロパティを変えることで円グラフの色を変えることができます。
《色の選び方については下記の記事をご覧ください》

 https://yaromai.jp/vba-cell-color/