Excelでは、VBAを使って既存のグラフを複製(コピー)し、その複製に別のデータ範囲を設定することで、元のグラフを保ったまま新しいグラフを効率よく作成することができます。
本記事では、VBAを用いて任意のグラフを複製し、位置をずらして配置しながら異なるデータ範囲で再描画する方法を、サンプルコードを交えて解説いたします。
目次
サンプルコード:グラフを複製し別のデータに差し替える
Sub DuplicateChartAndSetNewData()
Dim baseChart As ChartObject
Dim copiedChartShape As Shape
' 複製元のグラフ(シート上で最初のグラフ)を取得
Set baseChart = ActiveSheet.ChartObjects(1)
' グラフを複製(戻り値は Shape 型)
Set copiedChartShape = baseChart.Duplicate
' 複製したグラフの位置やデータ範囲を変更
With copiedChartShape
.Top = baseChart.Top
.Left = baseChart.Left + baseChart.Width + 30
.Chart.SetSourceData Source:=Range("B2:B5,D2:D5")
End With
' オリジナルグラフの書式をコピーして貼り付け
baseChart.Copy
copiedChartShape.Select
ActiveSheet.PasteSpecial Format:=2
End Sub
コードの解説
1. ChartObjects(1)
で対象のグラフを取得
Set baseChart = ActiveSheet.ChartObjects(1)
シート上にあるグラフの中から、最初に挿入されたグラフを対象としています。必要に応じて番号や名前で特定してください。
2. .Duplicate
でグラフを複製
Set copiedChartShape = baseChart.Duplicate
Duplicate
メソッドを使うことで、見た目・構造をそのまま複製できます。戻り値は Shape
オブジェクトなので、.Chart
でグラフにアクセスします。
3. 位置をずらして配置
.Top = baseChart.Top
.Left = baseChart.Left + baseChart.Width + 30
元のグラフの右隣に30ポイント間隔で配置しています。必要に応じて Top
や Left
の数値を変更可能です。
4. 新しいデータ範囲に設定
.Chart.SetSourceData Source:=Range("B2:B5,D2:D5")
複製後のグラフに、異なるデータ範囲を割り当てています。列の選び方を変えることで、グラフの内容を柔軟に切り替えられます。
5. 書式のコピー&貼り付け
baseChart.Copy
copiedChartShape.Select
ActiveSheet.PasteSpecial Format:=2
元のグラフの色やフォントなど、書式設定をそのまま複製したい場合は、このように Copy
→ PasteSpecial
を行うと効果的です。
よくある活用場面
- 複数のグラフを同じデザインで作りたいとき
- グラフを並べて比較したいとき
- 動的にデータを切り替えるテンプレートを作成したいとき
まとめ
Duplicate
メソッドを使えば、既存のグラフを簡単に複製できます。SetSourceData
を使って、新しいデータを割り当てることで、内容の異なるグラフを短時間で作成可能です。- 書式や位置を調整することで、統一感のある資料作成が効率化されます。
グラフ操作は目視での作業が多くなりがちですが、VBAで自動化することで大幅な時短につながります。ぜひご活用ください。