Excelで図形や画像を組み合わせたものを画像として保存したい場合があります。
ですが、Excelには画像として保存する機能が備わっていません。
解決策はいろいろありますが、今回は流用性を考えてVBAでの解決方法を紹介します。
動作を確認したExcelバージョン
・Excel 2013
・Excel 2016
どのような機能を作るか?
今回作るのは、セル範囲指定された部分を画像として保存出来るように作ります。
出来上がった画像の仕上がりはこちら↓
選択した範囲をまるっと画像化するため、背景に罫線があると写り込んでしまいます。
余計な罫線を写り込ませないために、あらかじめシートの罫線を消しておきました。
画像保存処理について
ソースは以下の記事を参考に作成しました。
参考:https://teratail.com/questions/105469
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
Sub ImgSave() ' エラー処理 On Error GoTo ErrorProc Dim rg As Range Dim cht As Chart Dim Path As String Dim WSH As Variant ' 範囲指定された部分を画像として保存 Set rg = Selection rg.CopyPicture appearance:=xlScreen, Format:=xlPicture ' Chartに画像を挿入して貼り付け Set cht = ActiveSheet.ChartObjects.Add(0, 0, rg.Width, rg.Height).Chart cht.Parent.Select ' Excel2016の不具合回避対応 遅延の為挿入 ' *** それでもうまく作動しない時は試してみてください↓ *** ' Application.Wait Now() + TimeValue("00:00:01") cht.Paste ' 名前を付けて保存 ' 保存先はお好みで Set WSH = CreateObject("WScript.Shell") outputPath = WSH.SpecialFolders("Desktop") outputPath = outputPath & "\IMG-" & CStr(Format(Now, "yyyymmddhhmmss")) & ".PNG" Set WSH = Nothing ' PNGとして保存します cht.Export Filename:=outputPath, filtername:="PNG" cht.Parent.Delete MsgBox "画像作成完了しました" Exit Sub ErrorProc: MsgBox "画像の作成に失敗しました" End Sub |
画像を保存する際に、Chart(グラフを表示させるためのオブジェクト)を利用しています。
はじめに、選択した範囲を「CopyPicture」で画像としてクリップボードにコピーします。
そして、ChartObjectsコレクションの「Add」メソッドを利用することで空の埋め込みグラフを作成し、このグラフの中に画像をペーストします。
そのあと、グラフを所定の場所に画像形式として保存させています。
画像ファイル名はがぶらないように「IMG-年月日時分秒.png」のように出力するようにしています。
今回はPNG形式にしてますが、JPEGでも出力出来ました。