ExcelマクロからExcelとWordを操作する

Excelマクロでは、Excelだけでなく他のアプリの処理も合わせて自動化することができます。

今回は、Excelで作成したリストを使って、Word文書を連続置換するマクロを例に説明します。

準備

置換リストの作成

Excelブックに検索語句と置換語句の組み合わせのリストを作成して、範囲に名前を付けます。

置換リスト

ライブラリの参照を設定する

VBAの編集画面(VBE)で、[ツール]-[参照設定]をクリックします。[参照設定]ダイアログボックスで「Microsoft Word 16.0 Object Library」をチェックして[OK]をクリックします。

この設定は、VBAプロジェクト(マクロファイル)単位で有効です。別のプロジェクトで同様のマクロを使用する際は別途設定する必要があります。

コードサンプルと解説

Sub Word文書を連続置換()

  Dim appWD As Word.Application
  Dim docWD As Word.Document
  Dim aryRep As Variant
  Dim r As Long

  'Wordを起動し、文書を開いて可視化
  Set appWD = New Word.Application
  Set docWD = appWD.Documents.Open("D:\test\サンプルレポート.docx")
  appWD.Visible = True
  'Excelシートの名前付き範囲を2次元配列に格納
  aryRep = ActiveWorkbook.Worksheets("リスト").Range("置換リスト")

  'Word文書を連続処理
  With docWD.Content.Find
    .ClearFormatting
    .Replacement.ClearFormatting
    .MatchWildcards = False
    .MatchFuzzy = False
    'リストに従って連続置換
    For r = 1 To UBound(aryRep)
      .Execute _
        FindText:=aryRep(r, 1), _
        ReplaceWith:=aryRep(r, 2), _
        Replace:=wdReplaceAll
    Next r
  End With

  Set docWD = Nothing
  Set appWD = Nothing
End Sub

ライブラリの参照とは

ライブラリの参照は、Excel VBAから他のアプリのオブジェクトやプロパティ、メソッドの情報を利用できるようにします。

はじめの「Dim docWD As Word.Document」ではWord文書オブジェクトの変数を宣言しています。ライブラリ参照なしでは、Excelは「Word? ナニソレ?」とエラーになってしまいます。

また、「docWD.」と入力するとWord文書オブジェクトと解釈されるので、これにかかるプロパティやメソッドが入力候補として表示され、効率的にコーディングを進められます。

Word上でのコーディングとは異なる点もあります。ここはExcel VBAの場なのでWordのオブジェクトであることの明示が必要なことです。Word VBAでは「Document」で済むところを「Word.Document」とします。

CreateObjectとの違い

次のようなコードを使うと、ライブラリを参照しなくてもExcelからWordの操作が可能です。

Dim appWD As Object
Set appWD = CreateObject("Word.Application")

ただしこの場合は、ExcelはWordやWordオブジェクトを「何か不明なオブジェクト」としてしか扱えないので、入力候補の表示などのサポートは使用できません。

Wordの起動後の可視化

appWD.Documents.Open で、Wordを起動して文書を開いた後、
appWD.Visible = True で、Wordのウィンドウや文書を可視化しています。これにより、処理結果の確認、文書の保存やWordの終了といった後処理をユーザーが行えるようになります。

ユーザーによる後処理が不要な場合は 可視化する必要はありません。その代わり、文書を閉じてWordを終了させて、不可視のWordが起動したまま取り残されないようにします。
appWD.Quit SaveChanges:=True

Wordマクロから上記と同じ処理を行うと…
タイトルとURLをコピーしました