Excelでグラフを作ったあと、「やっぱり棒グラフより折れ線グラフの方が見やすい」と種類を変更したくなることがあります。手動でグラフの種類を変えるのは数クリックで済みますが、複数のグラフをまとめて切り替えたい、ボタン一つで表示形式を切り替えたいといった場面では、VBAによる自動化が効果を発揮します。
この記事では、Chart.ChartType プロパティを使ってグラフの種類を切り替える方法を、よく使う定数一覧・実践的なサンプルコード・複合グラフの作り方まで解説します。
ChartTypeプロパティとは
ChartType は、グラフ(Chartオブジェクト)が棒グラフなのか折れ線グラフなのかを表すプロパティです。値を読み取ることで現在のグラフの種類を確認でき、値を代入することでグラフの種類を切り替えられます。
まずは新しくグラフを作成し、種類を指定する基本形です。
Sub CreateChart()
Dim cht As ChartObject
Set cht = ActiveSheet.ChartObjects.Add(Left:=100, Top:=50, Width:=400, Height:=250)
cht.Chart.SetSourceData Source:=Range("A1:B6")
cht.Chart.ChartType = xlColumnClustered
End Sub
すでにあるグラフの種類だけを変えたい場合は、対象のChartオブジェクトに対してChartTypeを代入するだけです。
Sub ChangeChartType()
ActiveSheet.ChartObjects(1).Chart.ChartType = xlLine
End Sub
よく使うChartTypeの定数一覧
グラフの種類は定数(列挙型XlChartType)で指定します。代表的なものは次のとおりです。
| 定数 | グラフの種類 |
|---|---|
| xlColumnClustered | 集合縦棒グラフ |
| xlColumnStacked | 積み上げ縦棒グラフ |
| xlBarClustered | 集合横棒グラフ |
| xlLine | 折れ線グラフ |
| xlLineMarkers | マーカー付き折れ線グラフ |
| xlPie | 円グラフ |
| xlDoughnut | ドーナツグラフ |
| xlArea | 面グラフ |
| xlXYScatter | 散布図 |
| xlRadar | レーダーチャート |
用途に応じてこれらを組み合わせることで、手作業を介さずにグラフの見た目をコントロールできます。
実践例:ボタンでグラフの種類をトグル切り替え
「棒グラフと折れ線グラフをボタン一つで切り替えたい」というケースはよくあります。現在のChartTypeを判定して、逆の種類に切り替えるコードです。
Sub ToggleChartType()
Dim cht As Chart
Set cht = ActiveSheet.ChartObjects(1).Chart
If cht.ChartType = xlColumnClustered Then
cht.ChartType = xlLine
Else
cht.ChartType = xlColumnClustered
End If
End Sub
このマクロを図形やボタンに登録しておけば、クリックのたびに表示形式が切り替わるインタラクティブな資料が作れます。
実践例:複数グラフの種類を名前でまとめて設定する
シート上に複数のグラフがある場合、名前ごとに適用したい種類を分けて一括設定することもできます。
Sub SetChartTypeByName()
Dim chtObj As ChartObject
For Each chtObj In ActiveSheet.ChartObjects
Select Case chtObj.Name
Case "売上グラフ"
chtObj.Chart.ChartType = xlColumnClustered
Case "累計グラフ"
chtObj.Chart.ChartType = xlLine
Case Else
chtObj.Chart.ChartType = xlPie
End Select
Next chtObj
End Sub
グラフの名前は「グラフツール」の「書式」タブや、ChartObjects(番号).Nameをイミディエイトウィンドウで確認すると調べられます。
系列単位でグラフの種類を変える(複合グラフ)
ChartTypeはグラフ全体だけでなく、SeriesCollection(系列)単位でも指定できます。これを利用すると、棒グラフと折れ線グラフを組み合わせた複合グラフを作成できます。
Sub CreateComboChart()
Dim cht As Chart
Set cht = ActiveSheet.ChartObjects(1).Chart
cht.SeriesCollection(1).ChartType = xlColumnClustered
cht.SeriesCollection(2).ChartType = xlLine
End Sub
売上(棒グラフ)と達成率(折れ線グラフ)を1つのグラフ上に重ねて表示するような、実務でよく使われる複合グラフもこの方法で自動化できます。
注意点
- 散布図・株価チャートへの変更は要注意:
xlXYScatter(散布図)や株価チャート系のChartTypeは、データ系列の構成(X軸用データの有無など)によっては意図しない表示になることがあります。変更後は必ず見た目を確認しましょう。 - 3-D系の種類:
xl3DColumnなどの3-D系グラフに切り替える場合、ChartTypeの変更だけで軸の見え方が大きく変わることがあるため、レイアウトの再確認が必要です。 - グラフが存在しない状態での実行エラー:
ActiveSheet.ChartObjects(1)のようにインデックス指定でアクセスする場合、対象シートにグラフが1つも無いと実行時エラーになります。ChartObjects.Countで件数を確認してから処理すると安全です。
まとめ
Chart.ChartTypeプロパティを使えば、グラフ全体はもちろん、系列単位でもグラフの種類を自由に切り替えられます。定数一覧を覚えておき、トグル切り替えや複合グラフの自動作成に応用すれば、レポート作成やダッシュボード作りの効率を大きく上げることができます。ぜひ実務のマクロに取り入れてみてください。


コメント