【Word VBA】複数の文字を一括・連続置換する

Wordで議事録報告書など文章作成をを行うことは多いかと思います。

そんなWordドキュメントをチェックするときに悩ませることは、

・作成する人によって用語表現のばらつきがあってチェックすることが大変
・ITサービスなどの名称の変更によりドキュメントの訂正が大変
・文字を置換する場合、一用語づつ繰り返さなければならないので面倒

ではないでしょうか。

特に中間管理職層やプロジェクトマネージャなど納品物や既存資産に責任を持つ方はこのチェック作業で苦労をしているかと思います。

今回はそんなお悩みを解決する、
Word VBAを使い、Wordドキュメント内の複数の用語を一括・連続置換して、きれいに用語を統一する方法
をご紹介します。



サンプルのWordドキュメントを準備する

今回の一括連続置換を行うWordドキュメントを用意します。

用語はなんでもよいのですが、サンプルでは最近名称が変わった「Microsoft365」を題材にしています。

文章は以下の通りです。

太字で強調表示しているところはすべて「Microsoft365」となりますので、これを「Microsoft365」に統一していきたいと思います。

 



サンプルの置換リストファイルを準備する

続いて置換したい用語を集めた置換リストファイルを準備します。

テキストエディッタで新規作成をします。

ファイル形式はCSVでカンマ「,」区切りで、

前を検索対象の用語、後ろを置換後の用語にしていきます。

サンプルでは置換後の用語を「Microsoft365」にしています。

完了したら適当なディレクトリに、拡張子を.csvにして保存します。

サンプルでは「置換リスト.csv」としています。



VBAを実装する

続いてWordのVisual Basic EditorVBAを実装します。

今回のVBAは置換リストであるCSVファイルを読み込み、そのリスト分置換処理を繰り返すというものになります。

実装にあたり、変更頂きたい箇所は以下です。

・置換リストファイルを指定する
置換リストを格納したパスに書き換えをお願いします。
csvFilePass = “C:\Users\****\Documents\****\置換リスト.csv

VBAソースコードは以下の通りです。

Sub 複数の文字列を置換()

Dim csvFilePass
Dim strBuf As String
Dim tmp As Variant

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

Open csvFilePass For Input As #1

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

Do Until EOF(1)
    
    '1行分のデータを読み込みます。
    Line Input #1, strBuf
    
    '文字列を","で分割します。
    tmp = Split(strBuf, ",")
    
    '検索時に指定した文字列から文字列および段落の書式を削除
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    
    '検索・置換の設定をおこないます。
    With Selection.Find
        .Text = tmp(0) '検索ワードを代入します。
        .Replacement.Text = tmp(1) '置換ワードを代入します。
        .Forward = True  '文書に対して末尾の方向(順方向)に検索
        .Wrap = wdFindContinue  '先頭(または末尾)に戻って検索をする
        
        '誤った置換を防止するため、あいまいな検索はOFFにします。
        .Format = False
        .MatchCase = True  '大文字と小文字の区別
        .MatchWholeWord = False
        .MatchByte = False
        .MatchAllWordForms = False
        .MatchSoundsLike = False
        .MatchWildcards = False
        .MatchFuzzy = False

        
        
    End With
    
    '置換を実行(全て置換)します。
    Selection.Find.Execute Replace:=wdReplaceAll
    
Loop
Close #1

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

End Sub


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

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

VisualBasic」をクリックします。

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

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

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

こちらで完了です。



VBAを実行する

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

①「開発」タブの「マクロ」をクリックし「複数の文字列を置換」を選択し、「実行」をクリックします。

②「置換が完了しました。」が表示されたら、
置換されていることを確認します。

変更前

変更後

はい!
置換されていますね!

置換する用語を加える

サンプルをよく見るとまだ不整合をおこしている用語がありますね。

「Exchange Online」も「EXO」も同じ意味なので、「Exchange Online」に統一したいと思います。

置換リストをテキストエディッタで開いて、
Exchange Online」の置換リストを追加します。

できたら保存をします。

同じようにVBAを実行してみましょう。

はい!

「EXO」が「Exchange Online」になり、統一されましたね!!

今回のVBAについて説明

Outlookオブジェクトを設定し、MAPI名前空間を介してOutlookの予定表を取得します。

置換リストCSVファイルを開きます。
Open csvFilePass For Input As #1

CSV内の行数分置換処理を繰り返します。
Do Until EOF(1)

1行分のデータを読み込みstrBufへ格納します。
Line Input #1, strBuf

文字列を”,”で分割し配列tmpへ格納します。
tmp = Split(strBuf, “,”)

検索時に指定した文字列から文字列および段落の書式を削除します。
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting

検索・置換の設定をおこないます。
With Selection.Find
.Text = tmp(0) ‘検索ワードを代入します。
.Replacement.Text = tmp(1) ‘置換ワードを代入します。
.Forward = True ‘文書に対して末尾の方向(順方向)に検索
.Wrap = wdFindContinue ‘先頭(または末尾)に戻って検索をする
.Format = False
.MatchCase = True ‘大文字と小文字の区別
.MatchWholeWord = False
.MatchByte = False
.MatchAllWordForms = False
.MatchSoundsLike = False
.MatchWildcards = False
.MatchFuzzy = False ’誤った置換を防止するため、あいまいな検索はOFFにします。
End With

設定値の説明は以下の通りです。

プロパティ 説明
Text 検索する文字列
MatchByte 半角と全角を区別する
MatchCase 大文字と小文字を区別する
MatchFuzzy あいまい検索(日)
MatchPhrase 空白文字を無視する
MatchWholeWord 完全に一致する単語だけを検索する
MatchWildcards ワイルドカードを使用する

参考にさせて頂きました。m( )m
https://tonari-it.com/word-vba-find-execute/

置換を全て置換で実行します。
Selection.Find.Execute Replace:=wdReplaceAll

なお、定数の種類は以下の通りです。

定数 置換の方法
wdReplaceNone 置換しない(既定値)
wdReplaceOne 1つだけ置換
wdReplaceAll 全て置換

 

 



さいごに

いかがでしょうか。

今回は、
Word VBAを使い、Wordドキュメント内の複数の用語を一括・連続置換して、きれいに用語を統一する方法
をご紹介しました。

今回のVBAと置換リストをうまく活用すれば、短期間で用語統一ができ、各ドキュメントの品質があがりますので、ぜひ活用いただければと思います。

コメントを残す

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