Excelでダッシュボードやレポートを作成する際、「別シートにある表やグラフを、見栄え良く貼り付けたい。しかも、元のデータが変更されたら、貼り付けた内容も自動で更新されてほしい」という高度なニーズがあります。
これを実現するのが、Excelの強力な機能**「リンクされた図」**です。VBAを使えば、この「リンクされた図」の貼り付けも自動化できます。
この記事では、指定したセル範囲をコピーし、元のデータへのリンクを持つ画像として貼り付けるための、VBAコードを解説します。
完成したVBAコード
以下が、「SourceData」シートのB2:E10
の範囲をコピーし、「Dashboard」シートのC3
セルに「リンクされた図」として貼り付けるVBAコードです。
Sub PasteRangeAsLinkedPicture()
' 変数を宣言します
Dim sourceRange As Range
Dim pasteCell As Range
'--- 設定 ---
' コピー元のセル範囲
Set sourceRange = ThisWorkbook.Worksheets("SourceData").Range("B2:E10")
' 貼り付け先の起点となるセル
Set pasteCell = ThisWorkbook.Worksheets("Dashboard").Range("C3")
'--- 設定ここまで ---
Application.ScreenUpdating = False
' --- 1. コピー元の範囲を通常通りコピー ---
sourceRange.Copy
' --- 2. 貼り付け先のシートとセルをアクティブにする ---
pasteCell.Parent.Activate
pasteCell.Select
' --- 3.「リンクされた図」として貼り付け ---
' Pictures.PasteメソッドのLink引数をTrueに設定します
ActiveSheet.Pictures.Paste Link:=True
' (任意) 貼り付けた図形の名前などを設定
' With ActiveSheet.Shapes(ActiveSheet.Shapes.Count)
' .Name = "LinkedReportTable"
' End With
Application.ScreenUpdating = True
MsgBox "セル範囲を「リンクされた図」として貼り付けました。"
End Sub
コードのポイント解説
① 通常のコピー .Copy
sourceRange.Copy
処理の始まりは、通常のセル範囲のコピーです。対象となるRange
オブジェクトの.Copy
メソッドを実行し、範囲の情報をクリップボードに送ります。
② リンクされた図として貼り付け: .Pictures.Paste(Link:=True)
ActiveSheet.Pictures.Paste Link:=True
ここが、このテクニックの核心部分です。 ActiveSheet.Pictures.Paste
は、クリップボードの中身を図(画像)として貼り付けるメソッドですが、オプションの引数である**Link
をTrue
に設定**することで、ただの画像ではなく、コピー元のセル範囲への「リンク」情報を持った特殊な図として貼り付けられます。
「リンクされた図」の動作
このマクロを実行して図を貼り付けた後、コピー元のSourceData
シートに戻って、B2:E10
の範囲内のセルの値や書式(色など)を変更してみてください。
その後、Dashboard
シートを確認すると、貼り付けた図の見た目が、元のデータの変更に追随して自動的に更新されているのが分かります。
この機能により、データの管理はデータシートで行い、レポートのレイアウトはダッシュボードシートで行う、という役割分担が明確になり、メンテナンス性の高いファイルを作成できます。
まとめ
元のデータを自動的に反映する「リンクされた図」をVBAで作成する手順は、以下の通りです。
- コピー元の
Range
オブジェクトに対し、通常の**.Copy
**メソッドを実行する。 - 貼り付け先のセルを選択する。
ActiveSheet.Pictures.Paste Link:=True
を実行する。
このLink:=True
という引数一つで、静的な画像ではなく、動的な「ライブオブジェクト」をシート上に配置できます。見栄えが良く、かつ常に最新の状態が保たれるダッシュボードやレポートの作成に、非常に役立つテクニックです。