【VBAリファレンス】【Excel VBA】折れ線グラフの「特定地点から色を変える」テクニックを完全網羅

スポンサーリンク

こんにちは、Excel VBA講師の佐藤です。日々の業務でグラフを作成する際、「データの推移を一本の線で表現したいけれど、目標達成前後で色を変えたい」「実績値と予測値で線の色を分けたい」といった要望を受けたことはありませんか?

実は、Excelの標準機能だけでは、ひとつのデータ系列の途中で色を変えることはできません。しかし、Excel VBAを活用すれば、この「かゆいところに手が届く」グラフ表現を自動化し、誰でも簡単にプロフェッショナルな資料を作成できるようになります。

今回は、VBAを使って折れ線グラフの途中から色を変えるテクニックについて、理論から実装コードまで徹底的に解説します。

なぜ標準機能では不可能なのか?

Excelのグラフにおける「データ系列」は、ひとつのオブジェクトとして扱われます。つまり、線の色を変更するプロパティを操作すると、その系列全体の色が変わってしまうのが仕様です。

これを回避するために、実務現場で古くから使われているのが「ダミー系列」を用いた手法です。色を変えたい地点を境に、データを「系列A(実績)」と「系列B(予測)」の二つに分割し、それぞれを重ねて表示することで、あたかも一本の線が途中で色を変えているように見せるという手法です。

VBAによる自動化のメリット

手動でデータを分割し、グラフを再構築するのは非常に手間がかかります。特にデータが頻繁に更新される場合、そのたびに作業が発生するのは非効率です。VBAを使えば、以下のプロセスを数秒で完了させることができます。

1. 元データから指定したインデックスでデータを分割する
2. 新しいデータ構造を配列としてメモリ上に展開する
3. グラフの系列データを動的に書き換える
4. 指定した色を各系列に適用する

実装コード:折れ線グラフの分割生成プログラム

以下のコードは、アクティブなグラフに対して、指定した位置から色を変更するプロシージャです。

Sub ChangeLineColorAtPoint()
Dim cht As Chart
Dim ws As Worksheet
Dim splitIndex As Long
Dim i As Long

‘ 対象のグラフとワークシートを設定
Set cht = ActiveChart
If cht Is Nothing Then
MsgBox “グラフを選択してください。”
Exit Sub
End If

‘ 分割位置(ここでは例として5番目のデータで分割)
splitIndex = 5

‘ グラフのデータ系列を操作するロジック
‘ 本来はここで元データを二つに分割し、系列を追加する処理を行う
‘ …(中略:データ整理ロジック)…

‘ 系列1(前半)の色を青に設定
cht.SeriesCollection(1).Format.Line.ForeColor.RGB = RGB(0, 112, 192)

‘ 系列2(後半)の色を赤に設定(重要:分割点を通るようにデータを調整)
cht.SeriesCollection(2).Format.Line.ForeColor.RGB = RGB(255, 0, 0)

MsgBox “グラフの塗り分けが完了しました。”
End Sub

実務で注意すべき「データ構造の罠」

VBAでグラフを操作する際に最もつまずきやすいのが、「分割点におけるデータの重複」です。

単にデータを前後で分けるだけでは、グラフ上で線が途切れてしまいます。視覚的に一本の線として繋げるためには、**「分割点となるデータポイント」を両方の系列に含める**必要があります。

例えば、10個のデータがあり、5番目で色を変えたい場合:
– 系列A:データ1〜5
– 系列B:データ5〜10

このように、5番目のデータを両方の系列に含めることで、グラフ上で線が重なり、滑らかに色が変わるように見せることができます。VBAを書く際は、この「境界値の重複処理」を忘れないようにしてください。

応用編:動的な分割位置の指定

さらに高度な使い方として、ユーザーがセルに入力した日付や値に基づいて、自動的に分割位置を計算させることも可能です。

`Application.Match` 関数をVBA内で使用すれば、特定の日付がデータ範囲の何番目にあるかを瞬時に特定できます。これを `splitIndex` に代入することで、「今日の日付を境に、過去は青、未来は点線の赤で表示する」といった動的なダッシュボードを構築できます。

まとめ:VBAでグラフを「語る」資料へ

グラフは単なる数値の羅列ではなく、見る人にメッセージを伝えるためのツールです。「どこで変化が起きたのか」「どこからが予測なのか」。こうした意図を色分けによって明確にすることは、プレゼンテーションにおいて非常に強力な武器となります。

今回のVBAコードをベースに、ぜひご自身の業務に合わせてカスタマイズしてみてください。最初は難しく感じるかもしれませんが、一度自動化の仕組みを作ってしまえば、それ以降の作業時間はゼロになります。

もしコードの挙動で分からないことや、「こんな機能を追加したい」というご要望があれば、ぜひコメント欄で教えてください。あなたのExcelライフがより効率的で、よりクリエイティブなものになることを応援しています。

次回は、「散布図の各点に自動でラベルを付与するVBA」について解説する予定です。お楽しみに!

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