定型の報告書を作成する際、「この見出しのすぐ下に、今月の売上グラフを貼り付けたい」というように、文書内の決まった位置にExcelのグラフを挿入したいケースは頻繁にあります。
VBAを使えば、あらかじめWord文書に用意しておいた**「目印(プレースホルダ)」**を検索し、その場所にグラフを正確に貼り付ける、という処理を自動化できます。
この記事では、Wordの検索機能(Findオブジェクト)を利用して、狙った位置にExcelグラフを画像として貼り付ける方法を解説します。
準備:テンプレートWord文書とExcelデータ
このマクロを実行する前に、以下の2つを準備します。
- Wordテンプレート: グラフを貼り付けたい場所に、
[CHART_AREA]
のような、他と重複しないユニークな目印(プレースホルダ)を記述したWord文書(例:Report_Template.docx
)を用意し、Excelファイルと同じフォルダに保存します。 - Excelデータとグラフ: VBAを実行するExcelファイル内に、元となるデータと、それに基づいたグラフを1つ作成しておきます。(例:
Sheet1
にChart 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への自動化において、**「プレースホルダを使った位置特定」**は非常に強力なテクニックです。
- Wordテンプレートにユニークな目印(
[PLACEHOLDER]
など)を配置する。 - VBAの**
Find
オブジェクト**でその目印を検索する。 - 見つかった場所(
Selection
)に、テキストや画像、表などを貼り付けて置換する。
このワークフローを応用すれば、請求書、報告書、ダイレクトメールなど、定型的な文書作成のほとんどを自動化することが可能になります。