【Excel VBA】簡単に表データから折れ線グラフを作成する方法

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

Step1 グラフの種類と範囲の指定

まず初めに、作成するグラフの種類を指定する必要があります。今回は折れ線グラフを指定します。グラフに表示する範囲は、表のセルA3からセルC34までとなります。

'グラフの作成
With ActiveSheet.Shapes.AddChart.Chart
  '折れ線グラフを指定
  .ChartType = xlLine
  'グラフ範囲を指定
  .SetSourceData Cells(3, "A").CurrentRegion
End With
'グラフの作成 With ActiveSheet.Shapes.AddChart.Chart   '折れ線グラフを指定   .ChartType = xlLine   'グラフ範囲を指定   .SetSourceData Cells(3, "A").CurrentRegion End With
'グラフの作成
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
'グラフオブジェクトをオブジェクト変数に格納 Set chartObj = ActiveSheet.ChartObjects(1) With chartObj 'グラフ表示位置とサイズの設定 .Top = Range("G2").Top .Left = Range("G2").Left .Width = 500 .Height = 300 End With
'グラフオブジェクトをオブジェクト変数に格納
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
'グラフを扱うオブジェクトをセット 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
'グラフを扱うオブジェクトをセット
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
With chartObj.Chart 'タイトルの表示 .HasTitle = True 'タイトルのを設定 .ChartTitle.Text = "7月の最高気温と最低気温" End With
With chartObj.Chart
    
    'タイトルの表示
    .HasTitle = True
    'タイトルのを設定
    .ChartTitle.Text = "7月の最高気温と最低気温"

End With

上記の記述で、グラフタイトルを「7月の最高気温と最低気温」と表示することができました。

Step5 グラフのタイトル設定

最後に、グラフタイトルのフォントサイズと太さの設定を行います。

With .ChartTitle.Format.TextFrame2.TextRange.Font
'タイトルサイズを指定
.Size = 15
'タイトル文字の太さを細字に指定
.Bold = False
End With
With .ChartTitle.Format.TextFrame2.TextRange.Font 'タイトルサイズを指定 .Size = 15 'タイトル文字の太さを細字に指定 .Bold = False End With
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
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
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

 
 
 
 
《関連記事》

Excelの読込・書込の基本操作紹介
技術
2022.1.12(Wed)

PythonでExcelを自動化すると便利! Excelの読込・書込の基本操作紹介

#Python#プログラム
 

誤字脱字を防ぐ!Excelの文章校閲機能 編
技術
2022.3.9(Wed)

誤字脱字を防ぐ!Excelの文章校閲機能 編

#まとめ#ビジネス
 

VBAの基本的な書き方入門
技術
2022.5.16(Mon)

プログラム学習の第一歩! VBAの基本的な書き方入門

#プログラム
 

記事をシェア
MOST VIEWED ARTICLES