Excelで作成した複数のグラフを、PowerPointの資料やWebサイトで使いたい場合、一つずつ右クリックして「図として保存」を繰り返すのは非常に手間がかかります。
VBAを使えば、シート上にあるすべてのグラフを、それぞれのグラフタイトルをファイル名として、PNGやJPGといった画像形式で一括エクスポートすることが可能です。この記事では、そのための自動化コードを詳しく解説します。
完成したVBAコード
以下が、現在アクティブなシート上にある全てのグラフを、個別のPNGファイルとして保存するVBAコードです。
Sub ExportAllChartsAsImages()
' 変数を宣言します
Dim targetSheet As Worksheet
Dim chartContainer As ChartObject
Dim exportFolderPath As String
Dim imageFileName As String
' 操作対象のシートと保存先フォルダを設定
Set targetSheet = ActiveSheet
exportFolderPath = ThisWorkbook.Path & "\"
' 処理開始のメッセージ
If targetSheet.ChartObjects.Count = 0 Then
MsgBox "このシートにはグラフがありません。", vbInformation
Exit Sub
End If
' --- シート上のすべてのグラフオブジェクトをループ処理 ---
For Each chartContainer In targetSheet.ChartObjects
' ChartObjectの中の、実際の「Chart」オブジェクトを操作
With chartContainer.Chart
' グラフにタイトルがある場合のみ処理を実行
If .HasTitle Then
' ファイル名として使用できない文字を置換
imageFileName = .ChartTitle.Text
imageFileName = Replace(imageFileName, "/", "/")
imageFileName = Replace(imageFileName, ":", ":")
' ファイルパスを結合してエクスポート
.Export Filename:=exportFolderPath & imageFileName & ".png", FilterName:="PNG"
Else
' タイトルがないグラフは、名前を付けてエクスポート
.Export Filename:=exportFolderPath & chartContainer.Name & ".png", FilterName:="PNG"
End If
End With
Next chartContainer
MsgBox targetSheet.ChartObjects.Count & "個のグラフを画像として保存しました。"
End Sub
コードのポイント解説
① ChartObjectsコレクションのループ
For Each chartContainer In targetSheet.ChartObjects
シート上に配置されているグラフは、ChartObjects
というコレクション(オブジェクトの集まり)で管理されています。For Each
ループを使ってこのコレクションを巡回させることで、シート上のグラフを一つずつ順番に処理することができます。
② ChartObjectとChartオブジェクト
VBAでグラフを扱う際、ChartObject
とChart
という2つのオブジェクトが登場します。
ChartObject
: グラフを囲んでいる「枠」や「コンテナ」のようなオブジェクトです。位置やサイズなどを管理します。Chart
: グラフそのものです。タイトル、軸、データ系列といった、グラフの「中身」を管理します。
画像としてエクスポートする.Export
メソッドは、Chart
オブジェクトが持っているため、chartContainer.Chart
のように、コンテナの中から中身を取り出して操作します。
③ Chart.Exportメソッド
.Export Filename:="ファイルパス", FilterName:="PNG"
これが、グラフを画像として保存する中心的な命令です。
Filename
引数: 保存するファイルのフルパスを指定します。サンプルコードでは、グラフのタイトル(.ChartTitle.Text
)をファイル名に利用することで、分かりやすい名前を自動で付けています。また、グラフにタイトルが無い場合に備えて、その際はグラフの内部名(chartContainer.Name
)を使うようにしています。FilterName
引数 (任意): 保存する画像の形式を指定します。"PNG"
または"JPG"
を指定するのが一般的です。省略した場合は、PNG形式で保存されることが多いです。
④ ファイル名の注意点
ファイル名には、\
/
:
*
?
"
<
>
|
といった文字は使えません。グラフタイトルにこれらの文字が含まれているとエラーになるため、サンプルコードではReplace
関数を使って、代表的な記号を全角文字に置き換える処理を入れています。
まとめ
シート上の全グラフを画像として一括保存する処理の流れは、以下の通りです。
For Each
ループでChartObjects
コレクションを巡回する。- ループの中で、各
ChartObject
から.Chart
プロパティでグラフ本体を取得する。 - グラフのタイトルなどを基に動的なファイル名を作成する。
.Export
メソッドで、指定したファイル名と形式(PNGなど)で画像を書き出す。
このマクロを用意しておけば、資料作成の際にExcelとPowerPointを行き来する手間が大幅に削減され、業務の効率化に大きく貢献します。