【Excel VBA】セル範囲をコピーして、図(画像)として貼り付ける方法

作成した表やレポートの一部を、値や書式が変更されない「スナップショット」として別の場所に貼り付けたい、という場合があります。

VBAの.CopyPictureメソッドを使えば、セル範囲を見た目そのままの「図(画像)」としてコピーし、シート上に貼り付けることができます。これにより、元のデータが変更されても影響を受けない、固定されたレポート部品を簡単に作成できます。

この記事では、セル範囲を図としてコピー&ペーストする基本的な方法を解説します。


目次

完成したVBAコード

以下が、「DataSheet」というシートのB2:E10の範囲をコピーし、「ReportSheet」シートのC3セルに図として貼り付けるVBAコードです。

Sub CopyRangeAsPicture()

    ' 変数を宣言します
    Dim sourceRange As Range
    Dim destinationCell As Range
    
    '--- 設定 ---
    ' コピー元のセル範囲
    Set sourceRange = ThisWorkbook.Worksheets("DataSheet").Range("B2:E10")
    ' 貼り付け先のセル
    Set destinationCell = ThisWorkbook.Worksheets("ReportSheet").Range("C3")
    '--- 設定ここまで ---
    
    Application.ScreenUpdating = False
    
    ' --- 1. 指定した範囲を「図」としてコピー ---
    ' 引数を指定して、画面表示の見た目で、ピクチャ形式でコピーします
    sourceRange.CopyPicture Appearance:=xlScreen, Format:=xlPicture
    
    ' --- 2. 貼り付け先のシートとセルをアクティブにする ---
    destinationCell.Parent.Activate
    destinationCell.Select
    
    ' --- 3. アクティブなシートに「図」として貼り付け ---
    ActiveSheet.Pictures.Paste
    
    ' (任意) 貼り付けた図の名前などを設定
    ' With ActiveSheet.Shapes(ActiveSheet.Shapes.Count)
    '     .Name = "Snapshot_Table"
    ' End With
    
    Application.ScreenUpdating = True
    
    MsgBox "セル範囲を図として貼り付けました。"

End Sub

コードのポイント解説

① セル範囲を図としてコピー: .CopyPicture

sourceRange.CopyPicture Appearance:=xlScreen, Format:=xlPicture

これが、セル範囲を「図」としてクリップボードにコピーする命令です。通常の.Copyとは異なり、セルデータそのものではなく、その範囲の見た目を画像情報としてコピーします。

.CopyPictureメソッドには、2つの重要な引数があります。

  • Appearance引数:
    • xlScreen (規定値): 画面に表示されている通りにコピーします。通常はこちらを使用します。
    • xlPrinter: 印刷した場合の見た目でコピーします。
  • Format引数:
    • xlPicture (規定値): ピクチャ形式でコピーします。拡大・縮小しても劣化しにくいベクトル画像です。
    • xlBitmap: ビットマップ形式でコピーします。昔の形式で、通常はピクチャ形式の方が高品質です。

② 図として貼り付け: .Pictures.Paste

ActiveSheet.Pictures.Paste

クリップボードに図としてコピーされた情報を、ワークシート上に貼り付けます。このメソッドを実行すると、現在アクティブなセル.Selectで選択したセル)の左上隅を基点として、図が挿入されます。

貼り付けられた図は、VBA上ではShapeオブジェクトとして扱われるため、後からサイズや位置を調整することも可能です。


まとめ

セル範囲を「図」として固定し、シートに貼り付ける手順は以下の2ステップです。

  1. コピー元のRangeオブジェクトに対し、**.CopyPicture**メソッドを実行する。
  2. 貼り付け先のセルを選択し、**ActiveSheet.Pictures.Paste**メソッドを実行する。

このテクニックは、以下のような場面で非常に有効です。

  • ダッシュボード上に、特定の時点での集計表やグラフのスナップショットを配置したい場合。
  • ユーザーによる編集や、数式の再計算による値の変動を防ぎたいレポート部品を作成したい場合。
  • メール本文などに貼り付けるための、見栄えの良い表の画像を素早く生成したい場合。

CopyCopyPictureを使い分けることで、VBAでのレポート作成の幅が大きく広がります。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次