VBATips

指定したセル範囲を画像として保存する【CopyPicture応用】【ExcelVBA】

指定したセル範囲を画像として保存したい

エクセルのデータ(テーブルやセル)を、画像としてPCに保存したい場合があります。

例)
・エクセル関数でデータを作成したため、データが修正や編集される前に画像データとして保存したい。
・マクロ実行時、不具合発生時の設定値を画像データとしてエクスポート(退避)したい。
標準では上記のような関数やメソッドは存在しない為、自作する必要があります。

指定したセル範囲を画像として保存するサンプルコード

Public Sub test()
    Dim FileSize As Long
    Dim pic As ChartObject
    Dim picName As String: picName = "\sample.png"
    Dim rng As Range: Set rng = Range("A1:D15")

    '■セル範囲を画像データでコピーする。
    rng.CopyPicture
      
    '■指定したセル範囲と同じサイズのpicを新規作成し、保存する。
    Set pic = ActiveSheet.ChartObjects.Add(0, 0, rng.Width, rng.Height)
    pic.Chart.Export ThisWorkbook.Path & picName
    FileSize = FileLen(ThisWorkbook.Path & picName)
    
    '■picのFileSizeを超えるまでループする(画像データが出来上がったら終了する)
    Do Until FileLen(ThisWorkbook.Path & picName) > FileSize
        pic.Chart.Paste
        pic.Chart.Export ThisWorkbook.Path & picName
        DoEvents
    Loop
    '■作成完了後、pic削除。
    pic.Delete
    Set pic = Nothing

End Sub

注意点

一度新規作成した上→再度画像データ作成をDo Untilでループしています。
これはCopyPictureがエラーになる・もしくは空白の画像で出力されるのを防ぐためです。

関連記事

セル範囲を画像としてコピーする【CopyPictureメソッド】【ExcelVBA】

コメント

タイトルとURLをコピーしました