【Excel VBA】シート上の全グラフを個別の画像ファイルとして一括保存する方法

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でグラフを扱う際、ChartObjectChartという2つのオブジェクトが登場します。

  • ChartObject: グラフを囲んでいる「枠」や「コンテナ」のようなオブジェクトです。位置やサイズなどを管理します。
  • Chart: グラフそのものです。タイトル、軸、データ系列といった、グラフの「中身」を管理します。

画像としてエクスポートする.Exportメソッドは、Chartオブジェクトが持っているため、chartContainer.Chartのように、コンテナの中から中身を取り出して操作します。

③ Chart.Exportメソッド

.Export Filename:="ファイルパス", FilterName:="PNG"

これが、グラフを画像として保存する中心的な命令です。

  • Filename引数: 保存するファイルのフルパスを指定します。サンプルコードでは、グラフのタイトル(.ChartTitle.Text)をファイル名に利用することで、分かりやすい名前を自動で付けています。また、グラフにタイトルが無い場合に備えて、その際はグラフの内部名(chartContainer.Name)を使うようにしています。
  • FilterName引数 (任意): 保存する画像の形式を指定します。"PNG"または"JPG"を指定するのが一般的です。省略した場合は、PNG形式で保存されることが多いです。

④ ファイル名の注意点

ファイル名には、\ / : * ? " < > | といった文字は使えません。グラフタイトルにこれらの文字が含まれているとエラーになるため、サンプルコードではReplace関数を使って、代表的な記号を全角文字に置き換える処理を入れています。


まとめ

シート上の全グラフを画像として一括保存する処理の流れは、以下の通りです。

  1. For EachループChartObjectsコレクションを巡回する。
  2. ループの中で、各ChartObjectから.Chartプロパティでグラフ本体を取得する。
  3. グラフのタイトルなどを基に動的なファイル名を作成する。
  4. .Exportメソッドで、指定したファイル名と形式(PNGなど)で画像を書き出す

このマクロを用意しておけば、資料作成の際にExcelとPowerPointを行き来する手間が大幅に削減され、業務の効率化に大きく貢献します。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次