shikumika’s diary

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

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

ExcelのVBAで、置換リストからWord文書の文字列を一括置換する方法の備忘録。

前回のWordのVBAを使用した「Word文書の文字列をExcelの置換リストで一括置換する方法」と同様のことをExcelのVBAで実施するサンプルを作成してみました。

置換リストの内容に応じてVBAの内容も変更したいなど、Excelファイルの単位でVBAを管理できるメリットもあります。

 

「Excelの置換リストでWord文書の文字列を一括置換」のVBAサンプル

サンプルは次のとおり。

Sub 置換リストでWord文書の文字列を一括置換()
    Dim wrd As Object
    Set wrd = CreateObject("Word.Application")

    Dim 置換リスト As Variant
    Dim 最終行 As Long
    Dim 行 As Long
    Dim ファイル名 As Variant

'置換リストを2次元配列に変換'
    With Sheets("置換リスト")
        最終行 = .Cells(Rows.Count, 1).End(xlUp).Row
        置換リスト = .Range(.Cells(1, 1), .Cells(最終行, 2)).Value
    End With

'置換対象のWordファイルの取得'
    With Application.FileDialog(msoFileDialogFilePicker)
        .AllowMultiSelect = False
        .Title = "置換対象のWordファイルを選択"
        .Filters.Clear
        .Filters.Add "Wordファイル", "*.docx"
    
        If .Show = -1 Then
            ファイル名 = .SelectedItems(1)
            .Filters.Clear
        Else
            .Filters.Clear
            Exit Sub
        End If
    End With

    Set wrd = wrd.Documents.Open(ファイル名)
    wrd.Application.Visible = True
    wrd.TrackRevisions = True '確認用で変更履歴をオン'

'置換リストで一括置換'
    With wrd.Content.Find
        .ClearFormatting
        .Replacement.ClearFormatting
        .MatchFuzzy = False
        .MatchWildcards = False
        .MatchCase = True
        .MatchByte = True
        
        For 行 = 2 To UBound(置換リスト)
            .Text = 置換リスト(行, 1)
            .Replacement.Text = 置換リスト(行, 2)
            .Execute Replace:=2
        Next 行
        
        .ClearFormatting
        .Replacement.ClearFormatting
  End With
End Sub

 

補足と参考情報

なお、「Execute Replace:=2」としている箇所は、全て置換のwdReplaceAllの値 2としている。理由は、【Word VBA】Excelシートの最終行取得(xlUpで実行時エラー 424の対応)と同様のエラー対応。

learn.microsoft.com

 

上記のVBAは、Wordの変更履歴をオンにしているので、一括置換でも問題は少ないと思うが、都度確認しながら置換するVBAのサンプルは以下のとおり。

shikumika.org

以上、ExcelのVBAで、Excelの置換リストからWord文書の文字列を一括置換する方法の備忘録でした。