VBAを使ってExcelからWord文書を作成する際、データをただ貼り付けるだけでなく、見出しのスタイルを適用したり、中央揃えにしたりと、体裁まで整えたいと思うことは多いでしょう。
VBAを使えば、そうしたWordの書式設定も完全に自動化できます。この記事では、ExcelからWordにテキストと表を貼り付けた後、段落のスタイルや配置、表のデザインなどをプログラムで操作する方法を解説します。
【重要】実行前の参照設定
今回のコードでは、wdAlignParagraphCenter
のようなWord独自の「定数」を利用して、コードを分かりやすくしています。これらの定数を使うには、VBAエディタで**「参照設定」**を事前に行う必要があります。
- VBE(
Alt
+F11
)を開き、メニューのツール
>参照設定
をクリックします。 - 一覧の中から**「Microsoft Word XX.0 Object Library」**を探し、チェックを入れて「OK」をクリックします。(XX.0の部分はWordのバージョンによって異なります)
この設定を行うことで、Wordの機能をVBAでスムーズに利用できるようになります。
完成したVBAコード
以下が、Word文書に貼り付けたテキストや表に書式を設定するVBAコードです。
'参照設定: Microsoft Word XX.0 Object Library
Sub FormatWordDocumentFromExcel()
' 変数を宣言します
Dim wordApp As Word.Application
Dim wordDoc As Word.Document
Dim titleRange As Range
Dim dataTableRange As Range
' 操作対象のExcelセル範囲を設定します
Set titleRange = ThisWorkbook.Worksheets("Sheet1").Range("B2")
Set dataTableRange = ThisWorkbook.Worksheets("Sheet1").Range("B4:E9")
' Wordアプリケーションを起動します
Set wordApp = New Word.Application
wordApp.Visible = True ' 画面表示をオンにする
' 新規文書を追加します
Set wordDoc = wordApp.Documents.Add
' --- 1. ExcelからWordへデータを転送 ---
' タイトルをコピーして、書式なしテキストとして貼り付け
titleRange.Copy
wordApp.Selection.PasteSpecial DataType:=wdPasteText
' 改行を2つ挿入
wordApp.Selection.TypeParagraph
wordApp.Selection.TypeParagraph
' データ範囲をコピーして、表として貼り付け
dataTableRange.Copy
wordApp.Selection.PasteExcelTable False, False, False
' --- 2. Word文書の書式を設定 ---
With wordDoc
' 1番目の段落(タイトル)に「表題」スタイルを適用
.Paragraphs(1).Style = "表題"
' 1番目の段落を中央揃えに設定
.Paragraphs(1).Alignment = wdAlignParagraphCenter
' 1番目の表に「表 (格子)」のデザインスタイルを適用
.Tables(1).Style = "表 (格子)"
' 1番目の表のすべての行を中央揃え(上下中央)に設定
.Tables(1).Rows.Alignment = wdCellAlignVerticalCenter
End With
' ファイルを保存
' wordDoc.SaveAs ThisWorkbook.Path & "\書式設定済みレポート.docx"
' wordDoc.Close
' wordApp.Quit
' オブジェクトを解放
Set wordDoc = Nothing
Set wordApp = Nothing
End Sub
(注: 実行確認しやすいよう、保存・終了する処理はコメントアウトしています。)
コードのポイント解説
① データ転送(テキストと表の貼り付け)
wordApp.Selection.PasteSpecial DataType:=wdPasteText
wordApp.Selection.PasteExcelTable False, False, False
まず、前回と同様の方法でExcelからテキストと表をWordに転送します。ここでは、PasteSpecial
を使い、Excel側の書式を無視してプレーンなテキストとして貼り付けているのがポイントです。
② 段落の書式設定(スタイルと配置)
.Paragraphs(1).Style = "表題"
.Paragraphs(1).Alignment = wdAlignParagraphCenter
Word文書内の特定のオブジェクトを操作するには、コレクションからインデックス番号で指定します。
.Paragraphs(1)
: 文書内の1番目の段落を指します。.Style = "表題"
: その段落のスタイルに、Wordの組み込みスタイルである「表題」を適用します。スタイル名を変えれば、様々なデザインを適用できます。.Alignment = wdAlignParagraphCenter
: 段落の配置を設定します。wdAlignParagraphCenter
は中央揃えを意味する定数です。wdAlignParagraphLeft
(左揃え)やwdAlignParagraphRight
(右揃え)なども利用できます。
③ 表の書式設定
.Tables(1).Style = "表 (格子)"
.Tables(1).Rows.Alignment = wdCellAlignVerticalCenter
段落と同様に、Tables(1)
で文書内の1番目の表を指定できます。
.Style = "表 (格子)"
: 表全体のデザインを、Wordの組み込みスタイル「表 (格子)」に設定します。.Rows.Alignment = wdCellAlignVerticalCenter
: 表のすべての行に対して、配置を設定します。wdCellAlignVerticalCenter
は、セル内の垂直方向の配置を中央に揃える設定です。
まとめ
VBAでWordの書式を操作する基本は、**「操作したいオブジェクト(段落、表など)をインデックス番号で指定し、そのオブジェクトのプロパティ(.Style
や.Alignment
など)を変更する」**という流れになります。
この方法を使えば、貼り付けたデータに対して、フォントの変更、文字サイズの変更、色の設定など、Wordで手作業でできるほとんどの書式設定をプログラムで制御できます。これにより、見た目も美しいレポートの完全自動生成が実現可能です。