グラフを画像にするには

グラフはVBAではChartObjectオブジェクトとChartオブジェクトを使って操作します。

ChartObjectオブジェクトとChartオブジェクトは親子関係にあり、ChartObjectのChartプロパティを使ってChartオブジェクトを生成できます。ChartObjectはグラフの位置などの外観などを操作し、Chartはグラフの内容を指します。

このChartオブジェクトのExportメソッドを使うことでグラフを画像化できます。


扱える画像の種類

Chart.Exportメソッドで扱える画像の種類にはJPEG、GIF、BMP、PNGがあります。TIFFなどは扱えません。

JPEGには拡張子の種類が複数ありますが、その中でも扱えるものと扱えないものがあります。たとえば.jpegや.jpgや扱えますが、.jpeは扱えません。

「扱えない」ものは、エラーが発生しますがファイルとしては一応出力されます。ファイルは出力されるのですが画像として解釈できないためか0バイトのファイルとして出力されます。

調べた中では、.pngファイルが画像の劣化も無く、ファイルサイズも小さいので一番良いのではないかと思います。JPEGは劣化が激しいです。

調査結果 拡張子
扱える .png(おすすめ)、.jpg、.jpeg、.gif、.bmp
扱えない .tiff、.dib、.svg、.pic、.pict、.eps

以下のコードもPNGファイルを出力するようにしています。


シートにある全てのグラフをPNGファイルとして出力するコード

アクティブシートにある全てのグラフをPNG画像として出力するコードです。

PNG画像は「セル座標+.png」というファイル名を付けてブックがあるフォルダに保存されます。



コード説明

コメントに大体のことは書いているので実行の仕方や処理概要などを補足します。

このコードを実行する場合は事前にグラフがあるシートをアクティブにした状態にしておく必要があります

ファイルの保存先はブックが置いてあるフォルダと同じにしています。理由はエラー処理がまず必要ないためです。任意のフォルダにするとそのフォルダが存在しているかどうかのチェックが必要になります。もし任意のフォルダへ保存したい場合はそのあたりの考慮をしてください。

あと、新規ブックで「Book1」のままになっているような未保存のブックも保存先が確定していないため、処理をしないようにしています。

ズームを100%にしているのは、Chart.Exportメソッドを実行する際の画像サイズに影響するためです。ズームのサイズが10%など小さいと画像も小さくなり、400%だと画像も大きくなります。そのため標準サイズとしてズームを100%に戻しています。

ループ内でグラフのセル位置をSelectメソッドで選択していますが、これはグラフがウィンドウに表示されていない場合を考慮しています。画面上に見えていないグラフをExportメソッドで保存しようとすると、画像として認識できないのかファイルは出力されますが0バイトになっていることがあります。それを回避するために各グラフを一度選択してからExportメソッドを実行するようにしています。

ファイル名をグラフの名前にしたい場合など、ファイル名に付けたいものはいろいろと要望があると思いますのでそこはカスタマイズしてください。「グラフ名+.png」にしたい場合はExportメソッドの行を「Call c.Export(sFolder & “\” & co.Name & sExtension)」のように変えてください。


実行サンプル

以下のように、シートにグラフが複数あるとします。ここでは4つです。グラフが雑だ、コピペしてるだろ、なんてのはスルーしてください。

上のコードを実行するとブックのフォルダにPNGファイルが4ファイル出力されます。それぞれのファイル名はグラフが配置されている左上のセル位置になります。