Excelで集計したデータを元に、Wordで報告書や送付状を自動作成したい、と考えたことはありませんか? ExcelのVBAを使えば、Wordアプリケーションを裏で操作し、文書の作成から文字の入力、保存までを全自動で行うことが可能です。
この記事では、VBAでWordを起動し、新しい文書にテキストを書き込んで保存するまでの一連の流れを、初心者にも分かりやすく解説します。
事前準備:参照設定について(推奨)
VBAで他のOfficeアプリケーションを操作するには、主に2つの方法(レイトバインディングとアーリーバインディング)があります。今回のコードは特別な設定が不要な「レイトバインディング」で記述しますが、本格的に開発する場合は「アーリーバインディング」が推奨されます。
アーリーバインディングを行うには、VBE(Visual Basic Editor)のメニューから ツール
> 参照設定
を開き、一覧から**「Microsoft Word XX.X Object Library」**にチェックを入れてください。
これにより、コードの自動補完(IntelliSense)が有効になり、開発効率が格段に向上します。
完成したVBAコード
以下が、ExcelからWordを操作して、新規文書を作成・保存するコードです。
Sub CreateWordDocumentFromExcel()
' 変数を宣言します
Dim wordApp As Object ' Wordアプリケーション
Dim wordDoc As Object ' Wordドキュメント
' --- 1. Wordアプリケーションを起動 ---
' CreateObjectでWordのインスタンスを生成します
Set wordApp = CreateObject("Word.Application")
' 処理中にWordの画面を表示したい場合は、以下のコメントを解除します
' wordApp.Visible = True
' --- 2. 新規文書を追加 ---
Set wordDoc = wordApp.Documents.Add
' --- 3. Word文書を操作 ---
With wordDoc
' 文書の先頭にテキストを入力します
.Range(0, 0).Text = "これはExcel VBAから自動的に作成された文書です。" & vbCrLf & "2行目のテキストです。"
' 文書を名前を付けて保存します (このExcelファイルと同じフォルダに保存)
.SaveAs ThisWorkbook.Path & "\VBA自動作成ドキュメント.docx"
' 文書を閉じます
.Close
End With
' --- 4. Wordを終了し、後片付け ---
' Wordアプリケーションを終了します
wordApp.Quit
' オブジェクト変数を解放します
Set wordDoc = Nothing
Set wordApp = Nothing
MsgBox "Word文書の作成が完了しました。"
End Sub
コードのポイント解説
① Wordアプリケーションの起動
Set wordApp = CreateObject("Word.Application")
' wordApp.Visible = True
CreateObject("Word.Application")
を実行すると、ユーザーの画面には表示されない状態(非表示モード)でWordがバックグラウンドで起動し、その操作権がwordApp
という変数に格納されます。
もし開発中に動作を確認したい場合は、wordApp.Visible = True
のコメントを外して実行すると、Wordのウィンドウが表示され、VBAによって操作されていく様子を視覚的に確認できます。
② 新規ドキュメントの追加
Set wordDoc = wordApp.Documents.Add
起動したWordアプリケーション(wordApp
)に対して、.Documents.Add
メソッドを実行することで、新しい空の文書が1つ作成されます。その文書の操作権がwordDoc
変数に格納されます。
③ テキストの入力 (.Range)
.Range(0, 0).Text = "..."
.Range(開始位置, 終了位置)
は、文書内の特定の範囲を指定するメソッドです。.Range(0, 0)
と指定すると**「文書の一番最初の位置」**を意味します。その.Text
プロパティに文字列を代入することで、指定した位置にテキストが入力されます。vbCrLf
はVBAにおける改行コードです。
④ 保存と終了処理
.SaveAs ThisWorkbook.Path & "\VBA自動作成ドキュメント.docx"
.Close
wordApp.Quit
.SaveAs
で文書に名前を付けて保存し、.Close
でその文書を閉じます。 ここで最も重要なのが、最後に**wordApp.Quit
を実行する**ことです。これを忘れると、非表示のWordプロセスがPCのメモリ内に残り続け、リソースを消費してしまう原因になります。
⑤ オブジェクトの解放
Set wordDoc = Nothing
Set wordApp = Nothing
最後に、オブジェクト変数にNothing
を代入して、メモリを完全に解放します。これは、VBAで外部オブジェクトを操作する際の作法として覚えておくと良いでしょう。
まとめ
Excel VBAからWordを操作する基本は、
CreateObject
でWordを起動する.Documents.Add
で新規文書を作成する- 作成した文書オブジェクトのプロパティやメソッドを使い、文字入力や書式設定を行う
.SaveAs
で保存し、.Quit
でアプリケーションを必ず終了させる
という流れになります。この基本を応用すれば、ExcelのセルデータをWordの表に転記したり、定型文とExcelの値を組み合わせて請求書を作成したりと、幅広い業務の自動化が可能になります。