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
ここがこの記事の中心となる部分です。
- まず、Excel VBAの命令である
tableRange.Copy
で、指定したセル範囲をクリップボードにコピーします。 - 次に、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つのアプローチがあります。
- 単純なテキスト:
Selection.TypeText
で直接書き込む。 - 表形式のデータ: Excel側で
.Copy
し、Word側でSelection.PasteExcelTable
を使って貼り付ける。
この2つの方法を組み合わせることで、Excelのデータを活用した多様なレポートや文書の作成を自動化できます。