作成した表やレポートの一部を、値や書式が変更されない「スナップショット」として別の場所に貼り付けたい、という場合があります。
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ステップです。
- コピー元の
Range
オブジェクトに対し、**.CopyPicture
**メソッドを実行する。 - 貼り付け先のセルを選択し、**
ActiveSheet.Pictures.Paste
**メソッドを実行する。
このテクニックは、以下のような場面で非常に有効です。
- ダッシュボード上に、特定の時点での集計表やグラフのスナップショットを配置したい場合。
- ユーザーによる編集や、数式の再計算による値の変動を防ぎたいレポート部品を作成したい場合。
- メール本文などに貼り付けるための、見栄えの良い表の画像を素早く生成したい場合。
Copy
とCopyPicture
を使い分けることで、VBAでのレポート作成の幅が大きく広がります。