今回は1つのグラフに2つの軸の設定する方法をご説明します。
例えば項目の数値が大きく離れている場合に、小さい数値の項目がほとんど表示されない時などに、それぞれの軸を設定してグラフに表示するということです。
2軸グラフとは別に、複合グラフというのもあります。
複合グラフの作成方法や、その他のグラフの作成方法、グラフの詳細設定は次の記事をご覧ください。
- グラフ操作 グラフの作成と詳細設定をする方法
- 折れ線グラフを作成する
- 棒グラフを作成する
- 散布図グラフを作成する
- 円グラフを作成する
- 複合グラフを作成する
- 複合グラフに2軸設定する方法
- 作成済みのグラフのデータ範囲を変更する
- シートに作成済みの埋め込みグラフを取得する
- グラフ(散布図)に近似曲線を追加する
1.2軸グラフとは
2軸グラフとは1つのグラフに、2つの軸を設定して表示したグラフの事です。
どんな時に使用するかというと、グラフにしたい項目の数値が大きく違う場合など、小さい数値の項目がほとんど表示されないため、数値軸を2つに分けて表示したい時などに使用します。
下の表とグラフは売上の桁と、受注件数の桁が違うため、普通のグラフにすると赤い受注件数が、ほとんど表示されていません。
これをそれぞれ数値軸を設定して表示すると次のようになります。
下図の様に1つのグラフに2軸を表示させます。
2.2軸グラフの作成方法
2軸グラフを作成するには、通常のグラフを作成してから個別に設定する方法と、個別に系列をのグラフの種類を指定する方法があります。
軸の設定には「AxisGroup = xlSecondary」で設定します。
それぞれ順にご説明します。
系列を個別に作成する
まずはグラフをアクティブシートに作成します。
1つ目の系列の棒グラフを作成します。
そのあとに、新しい系列を折れ線グラフで追加します。
Sub Sample1()
Dim ChartObj As Object
'■■■新しいグラフを作成■■■
With ActiveSheet.Shapes.AddChart.Chart
.ChartType = xlLine'棒グラフを指定
.SetSourceData Range(Cells(1, 1), Cells(13, 2)) 'データ範囲を指定
End With
'■■■作成したグラフを格納■■■
Set ChartObj = ActiveSheet.ChartObjects(1)
'■■■グラフに新しい系列(データ)を追加■■■
With ChartObj.Chart
.SeriesCollection.NewSeries '新しい系列追加
With .SeriesCollection(2) '新しい系列は2番目となる
.ChartType = xlLine '2つ目の系列のグラフの種類を折れ線に指定
.Values = Range("C2:C13") 'データ範囲を指定
.Name = Range("C1") '項目名を指定
.AxisGroup = xlSecondary '2軸設定
End With
End With
End Sub
「ActiveSheet.Shapes.AddChart.Chart」でグラフを作成します。
「.ChartType = xlLine」で作成したグラフの種類を指定しています。
「.SetSourceData Range(Cells(1, 1), Cells(13, 2)) 」でデータ範囲を指定していますが、A~B列のみ指定しています。
「Set ChartObj = ActiveSheet.ChartObjects(1)」で作成したグラフを変数に格納して、詳細設定を指定します。
「Chart」オブジェクトに「.SeriesCollection.NewSeries」で作成したグラフに新しい系列(データ)を追加しています。
追加した系列は2つ目となるので「With .SeriesCollection(2)」と指定して、詳細設定します。
「.ChartType」でグラフの種類を選択し、「.Values」でデータ選択をしています。
「.Name」で系列の名前を指定しています。
「.AxisGroup = xlSecondary」で系列2を2軸設定しています。
グラフ作成後に系列の種類を変更する
グラフをアクティブシートに作成します。
まとめて一括でグラフを作成してから、系列の種類を変更しています。
上記の個別に系列を作成するよりもシンプルになりました。
Sub Sample2()
Dim ChartObj As Object
'■■■新しいグラフを作成■■■
With ActiveSheet.Shapes.AddChart.Chart
.ChartType = xlLine'棒グラフを指定
.SetSourceData Range(Cells(1, 1), Cells(13, 3)) 'データ範囲を指定
End With
'■■■作成したグラフを格納■■■
Set ChartObj = ActiveSheet.ChartObjects(1)
'■■■グラフの既存系列(データ)の種類を変更■■■
With ChartObj.Chart
With .SeriesCollection(2) '系列の2番目を指定
.ChartType = xlLine '2つ目の系列のグラフの種類を折れ線に指定
.AxisGroup = xlSecondary '2軸設定
End With
End With
End Sub
「ActiveSheet.Shapes.AddChart.Chart」でグラフを作成します。
「.ChartType = xlLine」で作成したグラフの種類を指定しています。
「.SetSourceData Range(Cells(1, 1), Cells(13, 3)) 」でデータ範囲を指定していますが、A~C列と全て指定しています。
「Set ChartObj = ActiveSheet.ChartObjects(1)」で作成したグラフを変数に格納して、詳細設定を指定します。
種類を変更したい系列は2つ目となるので「With .SeriesCollection(2)」と指定して、詳細設定します。
「.ChartType」でグラフの種類を選択し、「.Values」でデータ選択をしています。
「.Name」で系列の名前を指定しています。
「.AxisGroup = xlSecondary」で系列2を2軸設定しています。
こちらの方が系列を追加するコードがないためシンプルになりました。
3.よりシンプルに2軸グラフを作成するコード
上記ではわかりやすく、グラフを作成する部分と系列を操作する部分を分けてコーディングしました。
それをまとめると次のように、よりシンプルに記述できます。
どちらもグラフ作成時にまとめて操作します。
結果はどちらも上記で紹介した方法と同じになります。
シンプルに系列を個別に作成する
Sub Sample3()
'■■■新しいグラフを作成■■■
With ActiveSheet.Shapes.AddChart.Chart
.ChartType = xlLine '棒グラフを指定
.SetSourceData Range(Cells(1, 1), Cells(13, 2)) 'データ範囲を指定
.SeriesCollection.NewSeries '新しい系列追加
With .SeriesCollection(2) '新しい系列は2番目となる
.ChartType = xlLine '2つ目の系列のグラフの種類を折れ線に指定
.Values = Range("C2:C13") 'データ範囲を指定
.Name = Range("C1") '項目名を指定
.AxisGroup = xlSecondary '2軸設定
End With
End With
End Sub
シンプルにグラフ作成後に系列の種類を変更する
Sub Sample4()
'■■■新しいグラフを作成■■■
With ActiveSheet.Shapes.AddChart.Chart
.ChartType = xlLine '棒グラフを指定
.SetSourceData Range(Cells(1, 1), Cells(13, 3)) 'データ範囲を指定
With .SeriesCollection(2) '系列の2番目を指定
.ChartType = xlLine '2つ目の系列のグラフの種類を折れ線に指定
.AxisGroup = xlSecondary '2軸設定
End With
End With
End Sub
4.2軸グラフサンプルコード
最後に2軸グラフのサンプルコードをご紹介します。
少し長くて、各グラフのオブジェクトのWithで入れ子になっていますので、どのオブジェクトを操作しているか注視してコードを見てください。
Sub Sample5()
'■■■新しいグラフを作成■■■
With ActiveSheet.Shapes.AddChart
.Top = 10 'グラフのトップ位置
.Left = 200 'グラフの左の位置
.Width = 400 'グラフ幅
.Height = 200 'グラフの高さ
.Name = "Chart1" 'グラフの名前
With .Chart
.ChartType = xlLine '棒グラフを指定
.SetSourceData Range(Cells(1, 1), Cells(13, 2)) 'データ範囲を指定
.SeriesCollection.NewSeries '新しい系列追加
With .SeriesCollection(2) '新しい系列は2番目となる
.ChartType = xlLine '2つ目の系列のグラフの種類を折れ線に指定
.Values = Range("C2:C13") 'データ範囲を指定
.Name = Range("C1") '項目名を指定
.AxisGroup = xlSecondary '2軸設定
End With
.HasTitle = True 'タイトル設定
.ChartTitle.Text = "年間売上/受注件数グラフ" 'タイトル文字列
With .ChartTitle.Format.TextFrame2.TextRange.Font
.Size = 10 'タイトル文字サイズ
.Fill.ForeColor.ObjectThemeColor = 6 'タイトル文字色
End With
.HasLegend = True '凡例表示
.Legend.Position = xlLegendPositionRight '凡例表示位置(右側)
With .Legend.Format.Fill
.Visible = msoTrue '塗りつぶし設定
.ForeColor.RGB = RGB(217, 217, 217) '色指定
End With
End With
End With
End Sub