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を行き来する手間が大幅に削減され、業務の効率化に大きく貢献します。
