【Excel VBA】Word文書を自動作成して文字を入力・保存する方法

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を操作する基本は、

  1. CreateObject でWordを起動する
  2. .Documents.Add で新規文書を作成する
  3. 作成した文書オブジェクトのプロパティやメソッドを使い、文字入力や書式設定を行う
  4. .SaveAs で保存し、.Quit でアプリケーションを必ず終了させる

という流れになります。この基本を応用すれば、ExcelのセルデータをWordの表に転記したり、定型文とExcelの値を組み合わせて請求書を作成したりと、幅広い業務の自動化が可能になります。

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

この記事を書いた人

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

目次