Excelマクロでは、Excelだけでなく他のアプリの処理も合わせて自動化することができます。
今回は、Excelで作成したリストを使って、Word文書を連続置換するマクロを例に説明します。
準備
置換リストの作成
Excelブックに検索語句と置換語句の組み合わせのリストを作成して、範囲に名前を付けます。
ライブラリの参照を設定する
VBAの編集画面(VBE)で、[ツール]-[参照設定]をクリックします。[参照設定]ダイアログボックスで「Microsoft Word 16.0 Object Library」をチェックして[OK]をクリックします。
コードサンプルと解説
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
」とします。
Wordの起動後の可視化
appWD.Documents.Open
で、Wordを起動して文書を開いた後、
appWD.Visible = True
で、Wordのウィンドウや文書を可視化しています。これにより、処理結果の確認、文書の保存やWordの終了といった後処理をユーザーが行えるようになります。
CreateObjectとの違い
次のようなコードを使うと、ライブラリを参照しなくてもExcelからWordの操作が可能です。
Dim appWD As Object
Set appWD = CreateObject("Word.Application")
ただしこの場合は、ExcelはWordやWordオブジェクトを「何か不明なオブジェクト」としてしか扱えないので、入力候補の表示などのサポートは使用できません。