Excel

【エクセル-マクロ活用集】一瞬でグラフが作れるテンプレ

エクセルでグラフを一瞬で作るためのVBA(マクロ)を紹介します。

以下のプログラムを使ってマクロを登録するだけで使えます

どれも日別・月別・年別と多様な場面で使えるグラフです。

棒グラフと折れ線グラフ

定番中の定番のグラフ

色は項目のセルの色になるので見やすいようアレンジしましょう

★作成グラフ画像

*個人的に好きな色
RGB(77, 77, 77)
RGB(0, 113, 188)
RGB(51, 153, 51)
RGB(224, 50, 83)
RGB(146, 7, 13)

★プログラム例

Sub 月別グラフA() 'https://excel-ubara.com/excelvba5/EXCELVBA221.html を参考

    Dim i As Integer '系列のFor〜Nextで使用
    Dim rowMax As Long 'グラフ範囲の最終行
    Dim colMax As Long 'グラフ範囲の最終列
    Dim MyRange As Range 'グラフ範囲
    Dim chartObj As ChartObject 'Chartオブジェクトのコンテナ
  
    rowMax = Cells(Rows.Count, 1).End(xlUp).Row 'グラフ範囲の最終行
    colMax = Cells(2, Columns.Count).End(xlToLeft).Column 'グラフ範囲の最終列
    Set MyRange = Range(Cells(1, 1), Cells(rowMax, colMax)) 'グラフ範囲
    
   'Chartを追加、グラフ範囲の下に作成
    Set chartObj = ActiveSheet.ChartObjects.Add(0, MyRange.Height, MyRange.Width, 250)
    '追加されたChartオブジェクトに対する処理
    With chartObj.Chart
        '元データ範囲の設定
        .SetSourceData MyRange
        'タイトル表示
        .HasTitle = True
        .ChartTitle.Text = "=" & MyRange.Cells(1, 1).Address(ReferenceStyle:=xlR1C1, External:=True)
        '全系列に対する処理
        For i = 1 To .SeriesCollection.Count
            With .SeriesCollection(i)
                Select Case i
                    Case 2
                        .ChartType = xlColumnClustered '縦棒グラフ
                        .AxisGroup = 1 '主軸
                        .ApplyDataLabels 'データラベル表示
                        .DataLabels.NumberFormatLocal = "#" 'データラベルの表示形式
                        .Interior.Color = Cells(i, 1).Interior.Color '棒グラフの色
                    Case 3, 4, 5, 6
                        .ChartType = xlLine '折れ線グラフ
                        .AxisGroup = 2 '第2軸
                        .Border.Color = Cells(i, 1).Interior.Color '折れ線グラフの色
                End Select
            End With
        Next
        .SeriesCollection(1).Delete '系列1を消去
        
        'Y軸について
        '主軸の書式設定
        .Axes(xlValue).TickLabels.NumberFormatLocal = "#" '表示形式
        .Axes(xlValue).MajorTickMark = xlInside '主目盛内側
        .Axes(xlValue).MajorGridlines.Delete '目盛線消去
        .Axes(xlValue).MinorTickMark = xlInside '補助目盛内側
        .Axes(xlValue).MinorTickMark = xlNone '補助目盛なし
        
        '第2軸の書式設定
        .Axes(xlValue, xlSecondary).MinimumScale = 0 '最小値
        .Axes(xlValue, xlSecondary).MaximumScale = 1 '最大値
        .Axes(xlValue, xlSecondary).MajorUnit = 0.1 '目盛間隔
        .Axes(xlValue, xlSecondary).TickLabels.NumberFormatLocal = "0%" '表示形式
        .Axes(xlValue, xlSecondary).MajorTickMark = xlInside '主目盛内側
        .Axes(xlValue, xlSecondary).MajorGridlines.Delete '目盛線消去
        .Axes(xlValue, xlSecondary).MinorTickMark = xlInside '補助目盛内側
        .Axes(xlValue, xlSecondary).MinorTickMark = xlNone '補助目盛なし
        
        'X軸について
        '主軸の書式設定
        .Axes(xlCategory).TickLabels.NumberFormatLocal = "#" '表示形式
        .Axes(xlCategory).MajorTickMark = xlInside '主目盛内側
        .Axes(xlCategory).MinorTickMark = xlInside '補助目盛内側
        .Axes(xlCategory).MinorTickMark = xlNone '補助目盛なし

    End With
End Sub
 

棒グラフと複数の折れ線グラフ(マーカー付)

折れ線グラフを複数入れたい時に便利
割合の折れ線グラフは使い勝手○

★作成グラフ画像

★プログラム

 
Sub 月別グラフB()

    Dim i As Integer '系列のFor〜Nextで使用
    Dim rowMax As Long 'グラフ範囲の最終行
    Dim colMax As Long 'グラフ範囲の最終列
    Dim MyRange As Range 'グラフ範囲
    Dim chartObj As ChartObject 'Chartオブジェクトのコンテナ
    Dim Shapei(10) As Variant '変数を入れるための箱を用意
    
    Shapei(1) = xlCircle
    Shapei(2) = xlSquare
    Shapei(3) = xlTriangle
    Shapei(4) = xlDiamond
    Shapei(5) = xlCircle
    Shapei(6) = xlSquare
  
    rowMax = Cells(Rows.Count, 1).End(xlUp).Row 'グラフ範囲の最終行
    colMax = Cells(2, Columns.Count).End(xlToLeft).Column 'グラフ範囲の最終列
    Set MyRange = Range(Cells(1, 1), Cells(rowMax, colMax)) 'グラフ範囲
    
   'Chartを追加、グラフ範囲の下に作成
    Set chartObj = ActiveSheet.ChartObjects.Add(0, MyRange.Height, MyRange.Width, 250)
    '追加されたChartオブジェクトに対する処理
    With chartObj.Chart
        '元データ範囲の設定
        .SetSourceData MyRange
        'タイトル表示
        .HasTitle = True
        .ChartTitle.Text = "=" & MyRange.Cells(1, 1).Address(ReferenceStyle:=xlR1C1, External:=True)
        '全系列に対する処理
        For i = 1 To .SeriesCollection.Count
            With .SeriesCollection(i)
                Select Case i
                    Case 2
                        .ChartType = xlColumnClustered '縦棒グラフ
                        .AxisGroup = 1 '主軸
                        .ApplyDataLabels 'データラベル表示
                        .DataLabels.NumberFormatLocal = "#" 'データラベルの表示形式
                        .Interior.Color = Cells(i, 1).Interior.Color '棒グラフの色
                    Case 3, 4, 5, 6
                        .ChartType = xlLine '折れ線グラフ
                        .AxisGroup = 2 '第2軸
                        .Border.Color = Cells(i, 1).Interior.Color '折れ線グラフの色
                        .MarkerStyle = Shapei(i)
                        .Format.Line.ForeColor.RGB = Cells(i, 1).Interior.Color
                        .Format.Fill.ForeColor.RGB = Cells(i, 1).Interior.Color
                        .MarkerBackgroundColor = Cells(i, 1).Interior.Color
                        .MarkerForegroundColor = Cells(i, 1).Interior.Color
                End Select
            End With
        Next
        .SeriesCollection(1).Delete '系列1を消去
        
        'Y軸について
        '主軸の書式設定
        .Axes(xlValue).TickLabels.NumberFormatLocal = "#" '表示形式
        .Axes(xlValue).MajorTickMark = xlInside '主目盛内側
        .Axes(xlValue).MajorGridlines.Delete '目盛線消去
        .Axes(xlValue).MinorTickMark = xlInside '補助目盛内側
        .Axes(xlValue).MinorTickMark = xlNone '補助目盛なし
        
        '第2軸の書式設定
        .Axes(xlValue, xlSecondary).MinimumScale = 0 '最小値
        .Axes(xlValue, xlSecondary).MaximumScale = 1 '最大値
        .Axes(xlValue, xlSecondary).MajorUnit = 0.1 '目盛間隔
        .Axes(xlValue, xlSecondary).TickLabels.NumberFormatLocal = "0%" '表示形式
        .Axes(xlValue, xlSecondary).MajorTickMark = xlInside '主目盛内側
        .Axes(xlValue, xlSecondary).MajorGridlines.Delete '目盛線消去
        .Axes(xlValue, xlSecondary).MinorTickMark = xlInside '補助目盛内側
        .Axes(xlValue, xlSecondary).MinorTickMark = xlNone '補助目盛なし
        
        'X軸について
        '主軸の書式設定
        .Axes(xlCategory).TickLabels.NumberFormatLocal = "#" '表示形式
        .Axes(xlCategory).MajorTickMark = xlInside '主目盛内側
        .Axes(xlCategory).MinorTickMark = xlInside '補助目盛内側
        .Axes(xlCategory).MinorTickMark = xlNone '補助目盛なし

    End With
End Sub

参考

https://excel-ubara.com/excelvba5/EXCELVBA221.html

を参考にさせていただきました。

★グラフの細かい設定変更はこちらをご参考に!

【Excel-VBA活用集】グラフ作成に便利な例文本記事ではわたしがよく使う例文を紹介していきます。 決められたグラフを多用する、たくさんのグラフを編集したい方向けです。 少しマニア...
【Excel-VBA活用集】グラフ範囲を自動的に更新!複数の系列にも対応するサンプル皆さんはExcelでデータを追加したあと、グラフの範囲を拡大したい時どうしていますか。 やるべきグラフの数が少なくグラフ内の系列も少なけ...

★参考書のオススメはこちら

【Excelで作業の自動化!マクロ・VBAを始める方へ】例文が豊富でオススメな本ランキング Excel マクロ・VBA に関する本で私がお勧めする3冊を紹介します。 初心者でもすぐに使え、上級者にも例題集として1...
Mickey@コーヒー好きエンジニア

【製造業×プログラミング×AI】Python/VBAを活用した業務改善、Streamlit/Plotlyを活用したWebアプリ開発について初心者向けに発信中|趣味は自家焙煎コーヒー作り|noteでは焙煎理論を発信|ココナラではプログラミングに関する相談,就職/転職やコーヒーに関する相談などのサービスをやっています