【ExcelVBA・マクロ】ChartTypeの使い方|棒グラフ・折れ線グラフなどグラフの種類を自動切り替えする方法【コピペOK】

ExcelVBA

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プロパティを使えば、グラフ全体はもちろん、系列単位でもグラフの種類を自由に切り替えられます。定数一覧を覚えておき、トグル切り替えや複合グラフの自動作成に応用すれば、レポート作成やダッシュボード作りの効率を大きく上げることができます。ぜひ実務のマクロに取り入れてみてください。

スポンサーリンク
スポンサーリンク
ExcelVBA
シェアする
いがぴをフォローする

コメント

タイトルとURLをコピーしました