【Excel VBA】Word文書の特定の場所にExcelのグラフを貼り付ける方法

定型の報告書を作成する際、「この見出しのすぐ下に、今月の売上グラフを貼り付けたい」というように、文書内の決まった位置にExcelのグラフを挿入したいケースは頻繁にあります。

VBAを使えば、あらかじめWord文書に用意しておいた**「目印(プレースホルダ)」**を検索し、その場所にグラフを正確に貼り付ける、という処理を自動化できます。

この記事では、Wordの検索機能(Findオブジェクト)を利用して、狙った位置にExcelグラフを画像として貼り付ける方法を解説します。


目次

準備:テンプレートWord文書とExcelデータ

このマクロを実行する前に、以下の2つを準備します。

  1. Wordテンプレート: グラフを貼り付けたい場所に、[CHART_AREA]のような、他と重複しないユニークな目印(プレースホルダ)を記述したWord文書(例: Report_Template.docx)を用意し、Excelファイルと同じフォルダに保存します。
  2. Excelデータとグラフ: VBAを実行するExcelファイル内に、元となるデータと、それに基づいたグラフを1つ作成しておきます。(例: Sheet1Chart 1という名前のグラフ)

【重要】実行前の参照設定

今回のコードでは、Wordの機能をスムーズに利用するため**「参照設定」が必要です。 VBEの ツール > 参照設定 から「Microsoft Word XX.0 Object Library」**を探し、チェックを入れてください。


完成したVBAコード

以下が、Word文書内のプレースホルダを探し、そこにグラフを貼り付けるVBAコードです。

'参照設定: Microsoft Word XX.0 Object Library
Sub PasteChartToWordPlaceholder()

    ' 変数を宣言します
    Dim wordApp As Word.Application
    Dim wordDoc As Word.Document
    Dim excelChart As ChartObject
    Dim templatePath As String

    ' --- 1. WordとExcelのオブジェクトを設定 ---
    ' テンプレートWord文書のパス
    templatePath = ThisWorkbook.Path & "\Report_Template.docx"
    ' 貼り付けたいExcelグラフ
    Set excelChart = ThisWorkbook.Worksheets("Sheet1").ChartObjects("Chart 1")

    ' Wordアプリケーションを起動
    Set wordApp = New Word.Application
    wordApp.Visible = True

    ' テンプレート文書を開く
    Set wordDoc = wordApp.Documents.Open(templatePath)

    ' --- 2. グラフをコピー ---
    ' グラフを画像としてクリップボードにコピー
    excelChart.CopyPicture

    ' --- 3. Word文書内のプレースホルダを探して貼り付け ---
    With wordApp.Selection.Find
        ' 検索する文字列を指定
        .Text = "[PASTE_CHART_HERE]"
        ' 検索を実行
        .Execute
        
        ' プレースホルダが見つかった場合
        If .Found = True Then
            ' 見つかった場所(Selection)に貼り付け
            wordApp.Selection.Paste
        Else
            MsgBox "グラフ貼り付け位置のプレースホルダが見つかりませんでした。"
        End If
    End With

    ' --- 4. 保存して終了 ---
    ' 変更を保存
    wordDoc.Save
    ' 文書を閉じる
    wordDoc.Close
    ' Wordを終了
    wordApp.Quit

    ' オブジェクトを解放
    Set wordDoc = Nothing
    Set wordApp = Nothing
    
    MsgBox "Word文書へのグラフ貼り付けが完了しました。"

End Sub

コードのポイント解説

① WordのFindオブジェクトを使った検索

With wordApp.Selection.Find
    .Text = "[PASTE_CHART_HERE]"
    .Execute
    ' ...
End With

Word VBAで文字列を検索するには、Selection.Findオブジェクトを使います。

  • .Text = "...": 検索したい文字列(プレースホルダ)を指定します。
  • .Execute: 検索を実行します。

検索が成功すると、見つかった文字列がSelection(選択範囲)の状態になります。

② プレースホルダが見つかったかの確認

If .Found = True Then
    ' 見つかった場合の処理
End If

.Executeを実行した後、Findオブジェクトの.Foundプロパティを調べることで、検索が成功したかどうかを確認できます。プレースホルダが見つからない場合にエラーになるのを防ぐため、If文で分岐させるのが安全な方法です。

③ Excelグラフのコピー (.CopyPicture)

excelChart.CopyPicture

ChartObjectに対して.Copyメソッドを使うと、グラフそのものがコピーされますが、.CopyPictureメソッドを使うと、グラフが静的な画像としてコピーされます。 Word文書に貼り付ける際は、元データとのリンクが不要な画像として貼り付ける方が、ファイルが安定しやすいため推奨されます。

④ Wordへの貼り付け (.Paste)

wordApp.Selection.Paste

検索で見つかったプレースホルダは、選択範囲(Selection)になっています。その上で.Pasteメソッドを実行すると、選択範囲がクリップボードの中身(今回はグラフの画像)に置き換わります。 これにより、プレースホルダがあった位置に、正確にグラフを貼り付けることができます。


まとめ

ExcelからWordへの自動化において、**「プレースホルダを使った位置特定」**は非常に強力なテクニックです。

  1. Wordテンプレートにユニークな目印[PLACEHOLDER]など)を配置する。
  2. VBAの**Findオブジェクト**でその目印を検索する。
  3. 見つかった場所(Selection)に、テキストや画像、表などを貼り付けて置換する。

このワークフローを応用すれば、請求書、報告書、ダイレクトメールなど、定型的な文書作成のほとんどを自動化することが可能になります。

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

この記事を書いた人

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

目次