エクセルでグラフを一瞬で作るための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
を参考にさせていただきました。
★グラフの細かい設定変更はこちらをご参考に!