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

ここまででいったん実行して見ます。
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を駆使して、業務の質と効率を同時に向上させることが可能です。ぜひ、この機会に自動化の実践に挑戦してみてください。