shikumika’s diary

日々の事務作業で手間なことを簡単にできる仕組み(自動化、方法など)、困ったことの解決方法を調べた備忘録

【Word VBA】Word文書の文字列をExcelの置換リストで一括置換

WordのVBAで、Excelで作成の置換リストを選択し、Word文書内の文字列を一括で置換する方法の備忘録。

文書作成では、用語の統一や送り仮名の有無など一貫性に注意が必要です。

Wordで作成した文書において、執筆ルールに従った修正業務を効率化するため、Excelの置換リストで一括置換するVBAサンプルを作成してみました。

 

サンプルの前提
  • Excelのファイルに、シート名「置換リスト」があり、下図のようにA列に置換前、B列に置換後の表がある。
     (1行目はタイトル、A列の値がある最終行までを置換対象とする)
  • WordからVBAを起動し、置換リストがある上記のExcelファイルを選択する。
  • VBAでの置換内容の確認、確定に利用するため、Word文書の変更履歴をオンに設定する。

Excelの置換リスト

参考サイト

基本の考え方は次の情報を参考にさせていただき、Excelファイルを都度選択で、テーブルでない表で動作などをアレンジしました。

koukimra.com

 

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文書の文字列を一括置換のサンプル。

shikumika.org