【Excel VBA】簡単に表データから折れ線グラフを作成する方法
目次
こんにちは、湯本です。
今回は、Excel VBAでグラフを作成する方法をご紹介します。VBAで実装できれば、データが更新されるたびに対象範囲を選択し直す手間が省け、作業効率が向上します。
用意したデータはコチラ。2022年7月の東京の最高気温と最低気温になります。画像では途中までになっていますが、31日まで用意しています。

では早速やっていきましょう!
Step1 グラフの種類と範囲の指定
まず初めに、作成するグラフの種類を指定する必要があります。今回は折れ線グラフを指定します。グラフに表示する範囲は、表のセルA3からセルC34までとなります。
'グラフの作成 With ActiveSheet.Shapes.AddChart.Chart '折れ線グラフを指定 .ChartType = xlLine 'グラフ範囲を指定 .SetSourceData Cells(3, "A").CurrentRegion End With
.ChartTypeでは、グラフの種類を設定します。設定できる種類の一部を紹介します。
| 折れ線 | xlLine |
|---|---|
| 集合縦棒 | xlColumnClustered |
| 集合横棒 | xlBarClustered |
.CurrentRegionは、セルA3を起点に作成されている表データを参照してくれる、便利なプロパティになります。
上記の記述で、以下の折れ線グラフが作成されました。

Step2 グラフの表示位置とサイズの指定
Step1で作成したグラフだと、小さくて見にくいので、見やすいように表示設定をしていきます。まずは、作成したグラフの表示位置とサイズを指定します。
'グラフオブジェクトをオブジェクト変数に格納
Set chartObj = ActiveSheet.ChartObjects(1)
With chartObj
'グラフ表示位置とサイズの設定
.Top = Range("G2").Top
.Left = Range("G2").Left
.Width = 500
.Height = 300
End With
上記の記述で、作成したグラフをセルG2に配置し、サイズを横500px高さ300pxに指定しています。

Step3 グラフの詳細指定
次は、グラフを横幅いっぱいに表示し、さらに見やすくしたいと思います。凡例や目盛り、線色の詳細設定を行っていきます。
'グラフを扱うオブジェクトをセット
With .Chart
'凡例の表示
.HasLegend = True
'凡例をグラフの下に表示
.Legend.Position = xlLegendPositionBottom
'最高気温の線を赤色へ変更
.FullSeriesCollection(1).Format.Line.ForeColor.RGB = RGB(255, 0, 0)
'最低気温の線を青色へ変更
.FullSeriesCollection(2).Format.Line.ForeColor.RGB = RGB(0, 0, 255)
'横軸の表示形式を指定
.Axes(xlCategory).TickLabels.NumberFormatLocal = "mm/dd"
'横軸の目盛りを2日間隔に指定
.Axes(xlCategory).MajorUnit = 2
'横軸目盛りの表示角度を90度に指定
.Axes(xlCategory).TickLabels.Orientation = 90
'縦軸の目盛りの種類をなしに指定
.Axes(xlValue).MajorTickMark = xlNone
End With
上記の記述で、以下のようにグラフの見栄えが整いました。

Step4 グラフのタイトル表示
次は、作成したグラフにタイトルを表示するための設定を行います。
With chartObj.Chart
'タイトルの表示
.HasTitle = True
'タイトルのを設定
.ChartTitle.Text = "7月の最高気温と最低気温"
End With
上記の記述で、グラフタイトルを「7月の最高気温と最低気温」と表示することができました。

Step5 グラフのタイトル設定
最後に、グラフタイトルのフォントサイズと太さの設定を行います。
With .ChartTitle.Format.TextFrame2.TextRange.Font
'タイトルサイズを指定
.Size = 15
'タイトル文字の太さを細字に指定
.Bold = False
End With
上記の記述で、グラフタイトルのフォントサイズを15pxにし、太さを細字設定にしています。
これで折れ線グラフの完成です!

今回のコード
階層構造とWith~Endの記述が難しく感じるかもしれませんが、作成手順と構造が理解できればそれほど難しくはありません。今回紹介したコードを以下にまとめましたので、実装するときの参考にしてみてください。
Option Explicit
Sub グラフ作成()
'グラフオブジェクトの変数宣言
Dim chartObj As Object
'グラフの作成
With ActiveSheet.Shapes.AddChart.Chart
'折れ線グラフを指定
.ChartType = xlLine
'グラフ範囲を制定
.SetSourceData Cells(3, "A").CurrentRegion
End With
'グラフオブジェクトをオブジェクト変数に格納
Set chartObj = ActiveSheet.ChartObjects(1)
With chartObj
'グラフ表示位置とサイズの設定
.Top = Range("G2").Top
.Left = Range("G2").Left
.Width = 500
.Height = 300
With .Chart
'凡例の表示
.HasLegend = True
'凡例をグラフの下に表示
.Legend.Position = xlLegendPositionBottom
'最高気温の線を赤色へ変更
.FullSeriesCollection(1).Format.Line.ForeColor.RGB = RGB(255, 0, 0)
'最低気温の線を青色へ変更
.FullSeriesCollection(2).Format.Line.ForeColor.RGB = RGB(0, 0, 255)
'横軸の表示形式を指定
.Axes(xlCategory).TickLabels.NumberFormatLocal = "mm/dd"
'横軸の目盛りを2日間隔に指定
.Axes(xlCategory).MajorUnit = 2
'横軸目盛りの表示角度を90度に指定
.Axes(xlCategory).TickLabels.Orientation = 90
'縦軸の目盛りの種類をなしに指定
.Axes(xlValue).MajorTickMark = xlNone
With chartObj.Chart
'タイトルの表示
.HasTitle = True
'タイトルの指定
.ChartTitle.Text = "7月の最高気温と最低気温"
With .ChartTitle.Format.TextFrame2.TextRange.Font
'タイトルサイズ
.Size = 15
'タイトル細字
.Bold = False
End With
End With
End With
End With
End Sub
《関連記事》


