【Excel VBA】ExcelのデータをWord文書に書き出し、表として貼り付ける方法

Excelで管理しているデータを、テキストと表を組み合わせた体裁の整ったWord文書として出力したい、というニーズは非常に多いです。VBAを使えば、単にテキストを書き出すだけでなく、セル範囲をそのままWordの表として貼り付ける、といった高度な操作も自動化できます。

この記事では、VBAでWord文書を新規作成し、特定のセルの値をテキストとして入力後、さらに別のセル範囲を表として貼り付けて保存するまでの一連の手順を解説します。


目次

Excelのサンプルデータ

はじめに、処理の元となるデータがSheet1に以下のように用意されていると仮定します。

  • セル B2: 文書の見出しとなるテキスト(例: 2025年8月度 売上報告
  • セル範囲 B4:D10: Wordに表として貼り付けたいデータ

完成したVBAコード

以下が、上記のデータをWord文書に出力するためのVBAコードです。

Sub ExportDataToWordDocument()

    ' 変数を宣言します
    Dim wordApp As Object
    Dim wordDoc As Object
    Dim textRange As Range
    Dim tableRange As Range

    ' --- 1. Wordアプリケーションを起動 ---
    Set wordApp = CreateObject("Word.Application")
    ' 処理の様子を表示する場合は下の行のコメントを外します
    ' wordApp.Visible = True

    ' --- 2. 操作対象のExcelセル範囲を設定 ---
    Set textRange = ThisWorkbook.Worksheets("Sheet1").Range("B2")
    Set tableRange = ThisWorkbook.Worksheets("Sheet1").Range("B4:D10")

    ' --- 3. 新規文書を追加し、データを書き込む ---
    Set wordDoc = wordApp.Documents.Add

    ' Selectionオブジェクトを使い、カーソル位置にテキストを入力
    wordApp.Selection.TypeText textRange.Value
    ' 改行を挿入
    wordApp.Selection.TypeParagraph
    wordApp.Selection.TypeParagraph ' もう一度改行してスペースを空ける

    ' 表にしたいExcel範囲をコピー
    tableRange.Copy
    ' Wordのカーソル位置に、Excelの表として貼り付け
    wordApp.Selection.PasteExcelTable False, False, False

    ' --- 4. 保存して終了 ---
    With wordDoc
        .SaveAs ThisWorkbook.Path & "\売上報告書.docx"
        .Close
    End With
    wordApp.Quit

    ' --- 5. オブジェクトを解放 ---
    Set wordDoc = Nothing
    Set wordApp = Nothing
    
    MsgBox "Word文書の作成が完了しました。"

End Sub

コードのポイント解説

① Wordの起動と新規文書の作成

Set wordApp = CreateObject("Word.Application")
Set wordDoc = wordApp.Documents.Add

CreateObjectでWordをバックグラウンドで起動し、.Documents.Addで新しい空の文書を作成します。ここまでは基本的なWord操作と同じです。

② Selectionオブジェクトを使ったテキスト入力

wordApp.Selection.TypeText textRange.Value
wordApp.Selection.TypeParagraph

Selectionオブジェクトは、Word文書内の現在カーソルがある位置を示します。

  • .TypeTextは、そのカーソル位置に指定した文字列を入力するメソッドです。
  • .TypeParagraphは、カーソル位置でEnterキーを押すのと同じ効果、つまり改行(段落の追加)を行います。

③ Excel範囲のコピーとWordへの貼り付け

tableRange.Copy
wordApp.Selection.PasteExcelTable False, False, False

ここがこの記事の中心となる部分です。

  1. まず、Excel VBAの命令であるtableRange.Copyで、指定したセル範囲をクリップボードにコピーします。
  2. 次に、Word VBAの命令であるwordApp.Selection.PasteExcelTableを使い、クリップボードの内容をWordの表形式で貼り付けます。

PasteExcelTableの3つの引数(False, False, False)は、それぞれ以下のオプションに対応しています。

  • LinkedToExcel: Falseにすると、元のExcelファイルとリンクしない、独立した表になります。
  • WordFormatting: Falseにすると、Wordの標準書式ではなく、Excel側の書式をなるべく維持しようとします。
  • RTF: Falseにすると、リッチテキスト形式ではなく、標準のWordテーブルとして貼り付けます。

④ 保存と終了処理

.SaveAs ...
.Close
wordApp.Quit

文書の編集が終わったら、.SaveAsで保存、.Closeで文書を閉じ、最後に必ず.QuitでWordアプリケーション本体を終了させます。


まとめ

Excel VBAからWordにデータを転送するには、主に2つのアプローチがあります。

  1. 単純なテキスト: Selection.TypeTextで直接書き込む。
  2. 表形式のデータ: Excel側で.Copyし、Word側でSelection.PasteExcelTableを使って貼り付ける。

この2つの方法を組み合わせることで、Excelのデータを活用した多様なレポートや文書の作成を自動化できます。

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

この記事を書いた人

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

目次