フォルダ内に複数あるブック(グラフシート)を画像保存する | ExcelVBA

フォルダ内にある大量のエクセルブックすべてを画像保存したいんだけど、1つづつ作業するのは大変すぎる!

そんな悩みを解決します。

ExcelVBAを使用して、フォルダ内に保存しているエクセルファイルを開き、グラフシートを画像(png)で保存する方法です。

目次

エクセルブックを画像に変換保存する例

  • マクロ実行前:エクセルファイル(赤枠)
  • マクロ実行後:保存後のファイル(緑枠)が増えます。ファイルの保存先は「F:\sample」です。
ファイル

画像保存するもとのエクセルデータ

エクセルブックのグラフシートです。これを画像として保存します。

グラフシート

マクロ実行ブック

画像保存したいファイルを一覧に書き出しマクロ実行する方法です。

シート[一覧]
参考

一覧を使わずフォルダ内にあるファイル全てに処理を繰り返す方法

ファイル名取得方法

B列に記載されているファイルが対象です。

グラフシートがアクティブでなくても実行可能なコード

画僧保存するもとのエクセルブックにはシートが2つあります。

  • グラフシート
  • グラフの参照データ

サンプルコード

グラフの参照データがアクティブでもっ実行可能なコードです。

Sub sample1()
    Const fPath As String = "F:\sample\"
    Dim fName As String
    Dim pName As String
    Dim i As Long
    
    For i = 2 To 5
        fName = Cells(i, 2) & ".xlsx"
        pName = Cells(i, 2) & ".png"
        If Dir(fPath & fName) <> "" Then
            Workbooks.Open Filename:=fPath & fName
            Charts(1).Export Filename:=fPath & pName, filtername:="PNG"
            ActiveWorkbook.Close SaveChanges:=False
        End If
    Next i
End Sub

説明

  • 7・15行目:For~Nextでシート[一覧]2行目~5行目まで処理を繰り返します。
    最終行が変動する場合は「5」を「Cells(Rows.Count, 1).End(xlUp).Row」とする方法もあり
  • 8行目:変数:画像保存したいグラフシートのあるブックです。
  • 9行目:変数・png保存するファイル名です。
  • 10行目:グラフシートのあるエクセルブックがある場合ブックを開きます。
  • 11行目:グラフシートのあるエクセルブックを開きます。
  • 12行目:グラフシートをpngで保存します。
  • 13行目:グラフシートのあるブックを保存せずに閉じます。

エクセルブックの保存先をファイル[一覧]に設定する方法

ファイル保存先をシート上のセルE1に設定する例です。

シート[一覧]

2行目の定数を次のように変更します。

Dim fPath As String: fPath = Cells(1, 5)

C列にはハイパーリンク関数を設定します。

画像サイズがバラバラになる場合

保存した画像(png)のサイズが統一れてない場合、グラフシートの倍率が違う可能性があります。

次の画面はズーム倍率が違うグラフシートをpng保存した画像を貼り付けた例です。

画像サイズが統一されてない

グラフシートがアクティブでなくても実行可能なコードのサンプルコード11行目の後を変更します。

Charts(1).Select
ActiveWindow.Zoom = 80
Charts(1).Export Filename:=fPath & pName, filtername:="PNG"
ActiveWorkbook.Close SaveChanges:=False
説明
  • 1行目:グラフシートを選択します。
  • 2行目:グラフシートの倍率を80%に設定する例です。
  • 3行目:グラフシートをpngで保存します。
  • 4行目:エクセルブックを保存せずに閉じます。保存したい場合は「SaveChanges:=True」にします。
目次