EXCEL VBA 指定セル範囲を画像にして保存

セル画像

EXCEL上で「セルが入力された」、「ボタンが押された」などアクションがあった場合に指定のセル範囲を画像にして保存したりメールに添付したいことがあります。

例えば、EXCEL上にあるボタンやセルが入力された時に自動的に指定のセル範囲の変化を報告したり、入力した値が異常値だった場合のお知らせ、入力後に指定の行動が必要の場合などあります。

今回、指定のセル範囲を画像にして保存する方法のVBA(Visual Basic for Applications)コードを紹介します。

セルを画像化コード

エクセルシート

以下のようにC列の「№」、D列に「品名」、E列に「金額」、F列に「数量」が入力されたデータが8行目まであります

セル範囲C3からF8までの範囲を画像にして保存したい場合

データ

全体コード

Sub セル画像()

Dim r As Range
Set r = Range("C3:F8")
r.CopyPicture

Dim chart As chart 'チャート(グラフ)用変数
Set chart = ActiveSheet.ChartObjects.Add(0, 0, r.Width, r.Height).chart

chart.Parent.Select
chart.Paste 
chart.Export ThisWorkbook.Path & "\画像.png"
chart.Parent.Delete

End Sub

コードの解説

最初に画像にしたいセル範囲用の変数を宣言します。

Dim r As Range ’画像にしたいセル範囲

セル範囲C3~F8をセットします。

Set r = Range("C3:F8")

セル範囲をコピーします。

r.CopyPicture

ここまでのコードを実行して見ましょう。

Sub セル画像()

Dim r As Range  '画像用の変数をセル範囲(Range)生成して
Set r = Range("C3:F8")  '範囲をセットする
r.CopyPicture  'セル範囲を画像としてコピーする

End Sub

コードを実行後に右クリックで「貼り付け」をするとセル範囲を画像にして貼り付けることができます。

画像がコピーされます。

次にセル範囲の画像を保存したいのですが、Excelには画像として保存する機能が備わっていません。そのためいったんグラフ(Chart)生成して画像を貼り付けて保存します。

チャート用の変数を宣言します。

Dim chart As chart

返送に値をセットします。

チャートの生成する位置はデータを保存した後にすぐにチャート削除するため位置は0,0に指定しています。もし、Excel上に画像を残しておきたい場合はX、Y座標を指定してください。

チャートのサイズはセル範囲がセットしていある「r」変数から横と縦のサイズを取得します。

Set chart = ActiveSheet.ChartObjects.Add(0, 0, r.Width, r.Height).chart
set chartの説明

ここまででいったん実行して見ます。

Sub セル画像()

Dim r As Range
Set r = Range("C3:F8")
r.CopyPicture

Dim chart As chart
Set chart = ActiveSheet.ChartObjects.Add(0, 0, r.Width, r.Height).chart 

End Sub

EXCELの座標に真っ白なグラフ(チャート)が生成されました。

画像がコピーされました。

次にチャートにセル範囲の画像を貼り付けてpng形式で保存します。

Parentを使いチャートの親要素を選択します。

chart.Parent.Select 

セル範囲を貼り付けます。

chart.Paste

チャートをExcelファイルと同じ場所に「画像.png」で保存します。

chart.Export ThisWorkbook.Path & "\画像.png"

さいごにチャートを削除して終わりです。

chart.Parent.Delete 

これでセル範囲を画像として保存することができます。

Sub セル画像()

Dim r As Range  '画像用の変数をセル範囲(Range)生成して
Set r = Range("C3:F8")  '範囲をセットする
r.CopyPicture  'セル範囲を画像としてコピーする

Dim chart As chart 'チャート(グラフ)用変数
Set chart = ActiveSheet.ChartObjects.Add(0, 0, r.Width, r.Height).chart  'チャート(画像)を追加

'chart.Parent.Select  'チャートの親要素を選択する
'chart.Paste 'セル範囲を貼り付ける
'chart.Export ThisWorkbook.Path & "\画像.png"  'チャートを書き出す
'chart.Parent.Delete 'チャートを削除

End Sub

Excelファイルと同じ場所に画像が生成されます。

エクセルファイルと同じ場所に保存されます。

さいごに

この記事が、皆さんの業務改善の一助となり、ワンクリックでデータの集計から報告書の作成、さらにはその報告書を関係者にメールで送信するという一連の作業を自動化など活用の幅があります。

報告作業の自動化を通じてより効率的なワークフローを実現するための参考になれば幸いです。ExcelとVBAを駆使して、業務の質と効率を同時に向上させることが可能です。ぜひ、この機会に自動化の実践に挑戦してみてください。