【Word VBA】複数ファイルの文字列を一括置換する方法

Wordで複数ファイルの文字列を一括置換したいときはないでしょうか。

例えば複数のワードファイルに記載されている文章に一部修正したい文字列があり、一度にまとめて置換したい場合などです。

けど、そんな中で悩むことは、

・Wordで複数ファイルの文字列を一括置換したいが方法がわからない
・Word VBAで複数ファイルの文字列を一括置換したいが複雑でどう組めばよいかわからない

ですよね。

今回はそんなお悩みを解決する
複数ファイルの複数の文字列を一括置換する方法について
まとめます!

Wordで複数ファイルの文字列を一括置換するイメージ

Wordで複数ファイルの文字列を一括置換するイメージについて説明をします。

置換したい文字列を含むワードファイルをいくつか作成します。

置換対象文字と置換後の文字が記載されたCSVファイルを用意します。

このファイルにより複数の置換パターンを設定することができます。

VBAで複数ファイルを開き置換する機能を追加します。

ワンクリックでVBAを実行すると、

複数ファイルに記載されている文字列が置換後の文字に置き換わります!

それでは早速使ってみましょう!

タカヒロ
タカヒロ
今回の置換処理は単一ファイル、単一パターンではなく複数ファイル × 複数のパターンですので、パターンとファイルの登録数を増やすほど、これまでの手間がぐんぐん減っていくというわけですね!

置換したい文字を含むサンプルのワードファイルを用意する

置換したい文字を含むサンプルのワードファイルを用意しましょう。

何ファイルでもよいですが、サンプルでは3ファイルにしています。

ファイル名は好きなものでOKです。

任意の場所へ保存しましょう。

置換前と置換後の文字を記載したCSVファイルを用意する

置換前と置換後の文字を記載したCSVファイルを用意しましょう。

カンマ区切りで手前に置換前の文字、隣に置換後の文字を記載します。

また、複数の置換パターンの設定ができますので、追加する場合は改行して同じくカンマ区切りで置換前、置換後の文字を記載します。

できたら任意の場所へ、拡張子「.csv」で任意の場所へ保存します。

Wordで複数ファイルの文字列を一括置換するVBA

Wordで複数ファイルの文字列を一括置換するVBAを準備します。

サンプルコードは以下の通りです。

Sub 複数ファイルの複数の文字列を置換()

Dim csvFilePass As String
Dim strBuf As String
Dim tmp As Variant

'対象ファイルの格納先パスを入力する配列を宣言します。ファイル数に応じて配列数を変更してください。
Dim arrTargetFilePass(2) As String


'対象ファイルを指定します。
arrTargetFilePass(0) = "C:\Users\takahiro\Documents\****\置換対象ファイル\置換対象ファイル1.docx"
arrTargetFilePass(1) = "C:\Users\takahiro\Documents\****\置換対象ファイル\置換対象ファイル2.docx"
arrTargetFilePass(2) = "C:\Users\takahiro\Documents\****\置換対象ファイル\置換対象ファイル3.docx"


'置換リストファイルを指定します。
csvFilePass = "C:\Users\takahiro\Documents\****\置換リスト.csv"


'対象ファイルの格納先パスを件数分取得します。
For Each targetFilePass In arrTargetFilePass

    Set objTargetFile = Documents.Open(targetFilePass)
    
    
    Open csvFilePass For Input As #1
    
    'CSV内の行数分置換処理を繰り返します。
    '置換処理
    Do Until EOF(1)
        
        '1行分のデータを読み込みます。
        Line Input #1, strBuf
        
        '文字列を","で分割します。
        tmp = Split(strBuf, ",")
    
        '検索・置換の設定をおこないます。
        With Selection.Find
        
            .ClearFormatting '検索条件から書式を削除します。
            .Replacement.ClearFormatting '置換対象の書式を削除します。
            
            .Text = tmp(0) '検索ワードを代入します。
            .Replacement.Text = tmp(1) '置換ワードを代入します。
            
            .Forward = True  '文書に対して末尾の方向(順方向)に検索します。
            .Wrap = wdFindContinue  '先頭(または末尾)に戻って検索をします。
            
            .Format = False  'フォーマット変更を有効する(True)、有効にしない(False)を設定します。
            .MatchCase = True  '英語の大文字と小文字の区別する(True)、区別しない(False)を設定します。
            .MatchWholeWord = False '単語全体を検索対象としない設定にします。
            .MatchByte = False '半角と全角を区別する(True)、区別しない(False)を設定します。
            .MatchAllWordForms = False '英単語の異なる活用形検索を有効する(True)、有効にしない(False)を設定します。
            .MatchWildcards = False 'ワイルドカード(?*など任意の文字)を使った検索を有効する(True)、有効にしない(False)を設定します。
            .MatchSoundsLike = False '誤った置換を防止するため、英語のあいまいな検索はOFFにします。
            .MatchFuzzy = False '誤った置換を防止するため、日本語のあいまいな検索はOFFにします。
    
        End With
        
        '置換を実行(全て置換)します。
        Selection.Find.Execute Replace:=wdReplaceAll
    Loop
    Close #1
    
    '置換対象ファイルを保存します。保存したくない場合はコメントアウトして無効化してください。
    objTargetFile.Save
Next

MsgBox "置換が完了しました。"

Set objTargetFile = Nothing

End Sub

VBAの設定をする

Wordで複数ファイルの文字列を一括置換するVBAに設定をしていきましょう。

設定箇所は以下の通りです。

対象ファイルの格納先パスを入力する配列を宣言します。ファイル数に応じて配列数を変更してください。

Dim arrTargetFilePass(2) As String

サンプルではファイル数3つなので、3が入力する数字に該当するかと思いますが、配列は0番から数えますので2が入る形になります。

タカヒロ
タカヒロ
ファイル数-1の数を配列の数へ指定すればOKです。

置換対象ファイルをフルパスで指定します。

arrTargetFilePass(0) = “C:\Users\takahiro\Documents\****\置換対象ファイル\置換対象ファイル1.docx”
arrTargetFilePass(1) = “C:\Users\takahiro\Documents\****\置換対象ファイル\置換対象ファイル2.docx”
arrTargetFilePass(2) = “C:\Users\takahiro\Documents\****\置換対象ファイル\置換対象ファイル3.docx”

置換リストファイルを指定します。

csvFilePass = “C:\Users\takahiro\Documents\****\置換リスト.csv”
Const intshoshikiNum = 1

VBAを実装し実行する

VBAを実装し実行してみましょう。

実装方法は「VBAを実装する」をご覧ください。

実装できたらマクロから「複数ファイルの複数の文字列を置換」を見つけ実行します。

はい、複数の指定ファイルの文字列が置換されていますね!

保存しない設定をする

今回のVBAは置換後すぐに保存するようにしていますが、確認してから保存したい場合もあるかと思います。その場合は以下Saveメソッドをコメントアウトして無効化するか、削除をしてください。

objTargetFile.Save

VBAの説明

Wordで複数ファイルの文字列を一括置換するVBAについて説明をします。

対象ファイルの格納先パスを件数分取得します。

For Each targetFilePass In arrTargetFilePass

対象ファイルを開きオブジェクトにセットします。

Set objTargetFile = Documents.Open(targetFilePass)

置換前後の文字列が記載されているCSVファイルを開きます。

Open csvFilePass For Input As #1

CSV内の行数分置換処理を繰り返します。

Do Until EOF(1)

1行分のデータを読み込みます。

Line Input #1, strBuf

文字列を”,”で分割します。

tmp = Split(strBuf, “,”)

検索・置換の設定をおこないます。

With Selection.Find

検索設定は以下の設定です。

.Text = tmp(0)
検索ワードを代入します。
.Replacement.Text = tmp(1)
置換ワードを代入します。

検索条件は以下の設定です。

.ClearFormatting
検索条件から書式を削除します。
.Replacement.ClearFormatting
置換対象の書式を削除します。
.Forward = True
文書に対して末尾の方向(順方向)に検索します。
.Wrap = wdFindContinue
先頭(または末尾)に戻って検索をします。
.Format = False
フォーマット変更を有効する(True)、有効にしない(False)を設定します。
.MatchCase = True
英語の大文字と小文字の区別する(True)、区別しない(False)を設定します。
.MatchWholeWord = False
単語全体を検索対象としない設定にします。
.MatchByte = False
半角と全角を区別する(True)、区別しない(False)を設定します。
.MatchAllWordForms = False
英単語の異なる活用形検索を有効する(True)、有効にしない(False)を設定します。
.MatchWildcards = False
ワイルドカード(?*など任意の文字)を使った検索を有効する(True)、有効にしない(False)を設定します。
.MatchSoundsLike = False
誤った置換を防止するため、英語のあいまいな検索はOFFにします。
.MatchFuzzy = False
誤った置換を防止するため、日本語のあいまいな検索はOFFにします。

置換を実行(全て置換)します。

Selection.Find.Execute Replace:=wdReplaceAll

タカヒロ
タカヒロ
Microsoft公式ではオブジェクトのcontentプロパティ指定でFindメソッドが機能するようなサンプルコードがあったのですが、Content.Findだとうまくいかず…Selectionとしていますので、処理中は他のWordファイルを触らないようお願いします。

置換対象ファイルを保存します。

objTargetFile.Save

VBAを実装する

実装手順は以下の通りです。

①Wordを新規に開き、「開発」タブをクリックし、

VisualBasic」をクリックします。

もしくはショートカットキー「Alt」+「F11」でもOKです。

②標準モジュールを追加します。
左ペインの「Nomal」を右クリックし、「挿入」、「標準モジュール」を選択します。

③右ペインのウインドウに上記のVBAを入力します。

こちらで完了です。

VBAを実行する

早速VBAの実行をしてみましょう。

①「開発」タブの「マクロ」をクリックし今回実装したマクロ明を選択し、「実行」をクリックします。

②「完了しました。」が表示されたら、処理結果を確認しましょう。

さいごに

いかがでしょうか。

今回は、
複数ファイルの複数の文字列を一括置換する方法について
まとめました。

また、他にも便利な方法がありますので、よろしければご参照頂ければと思います。



この記事の関連キーワード

こちらの記事の関連キーワード一覧です。クリックするとキーワードに関連する記事一覧が閲覧できます。



タカヒロ

 
タカヒロ  
Excelの基礎がスルスル入ってくるAmazonランク1位の優良Excel本です。
 
この基礎本と応用技が多いエク短と組み合わせれば、短時間で誰よりもExcelが使いこなせるかと思います。
 
2022/1/21(金)23: 59までAmazon限定の「厳選ショートカットキー」DL特典アリです。 >詳細を見てみる 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です