WordのVBAで、Excelで作成の置換リストを選択し、Word文書内の文字列を一括で置換する方法の備忘録。
文書作成では、用語の統一や送り仮名の有無など一貫性に注意が必要です。
Wordで作成した文書において、執筆ルールに従った修正業務を効率化するため、Excelの置換リストで一括置換するVBAサンプルを作成してみました。
サンプルの前提
- Excelのファイルに、シート名「置換リスト」があり、下図のようにA列に置換前、B列に置換後の表がある。
(1行目はタイトル、A列の値がある最終行までを置換対象とする) - WordからVBAを起動し、置換リストがある上記のExcelファイルを選択する。
- VBAでの置換内容の確認、確定に利用するため、Word文書の変更履歴をオンに設定する。
参考サイト
基本の考え方は次の情報を参考にさせていただき、Excelファイルを都度選択で、テーブルでない表で動作などをアレンジしました。
VBAサンプル
VBAコードのサンプルは次のとおり。
Sub Word文書の文字列をExcelの置換リストで一括置換() Dim xlApp As Object Set xlApp = CreateObject("Excel.Application") Dim 置換リスト As Variant Dim 最終行 As Long Dim 行 As Long Dim ファイル名 As Variant '置換リストがあるExcelファイルの取得' With Application.FileDialog(msoFileDialogFilePicker) .AllowMultiSelect = False .Title = "置換リスト(Excelファイル)を選択" .Filters.Clear .Filters.Add "Excelファイル", "*.xlsx" If .Show = -1 Then ファイル名 = .SelectedItems(1) .Filters.Clear Else .Filters.Clear Exit Sub End If End With '置換リストを2次元配列に変換して閉じる' Set xlApp = xlApp.Workbooks.Open(ファイル名) xlApp.Application.Visible = True With xlApp.Sheets("置換リスト") 最終行 = .Cells(.Rows.Count, 1).End(-4162).Row 置換リスト = .Range(.Cells(1, 1), .Cells(最終行, 2)).Value End With xlApp.Close SaveChanges:=False ActiveDocument.TrackRevisions = True '確認用で変更履歴をオン' '置換リストで一括置換' With ActiveDocument.Content.Find .ClearFormatting .Replacement.ClearFormatting .MatchFuzzy = False .MatchWildcards = False .MatchCase = True .MatchByte = True For 行 = 2 To UBound(置換リスト) .Text = 置換リスト(行, 1) .Replacement.Text = 置換リスト(行, 2) .Execute Replace:=wdReplaceAll Next 行 .ClearFormatting .Replacement.ClearFormatting End With End Sub
なお、「MatchCase = True」で大文字小文字の区別、「MatchByte = True」で半角・全角の区別をしているので、用途によってコードの調整必要。
以上、WordのVBAで、Excelで作成の置換リストを選択し、Word文書内の文字列を一括で置換する方法の備忘録でした。
ExcelのVBAでWord文書の文字列を一括置換のサンプル。