【Excel VBA】元のデータを自動反映する「リンクされた図」としてセル範囲を貼り付ける方法

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は、クリップボードの中身を図(画像)として貼り付けるメソッドですが、オプションの引数である**LinkTrueに設定**することで、ただの画像ではなく、コピー元のセル範囲への「リンク」情報を持った特殊な図として貼り付けられます。

「リンクされた図」の動作

このマクロを実行して図を貼り付けた後、コピー元のSourceDataシートに戻って、B2:E10の範囲内のセルの値や書式(色など)を変更してみてください。

その後、Dashboardシートを確認すると、貼り付けた図の見た目が、元のデータの変更に追随して自動的に更新されているのが分かります。

この機能により、データの管理はデータシートで行い、レポートのレイアウトはダッシュボードシートで行う、という役割分担が明確になり、メンテナンス性の高いファイルを作成できます。


まとめ

元のデータを自動的に反映する「リンクされた図」をVBAで作成する手順は、以下の通りです。

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

このLink:=Trueという引数一つで、静的な画像ではなく、動的な「ライブオブジェクト」をシート上に配置できます。見栄えが良く、かつ常に最新の状態が保たれるダッシュボードやレポートの作成に、非常に役立つテクニックです。

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

この記事を書いた人

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

目次