Wordで複数の置換作業を一括で行うマクロです。
実は、「毎週置換作業をしているのだけど、置換する文字列が多くてどうにかなりませんか?」との質問を受けました。
置換するための一覧表は下のようにExcelで作成されていました。
変換文字列は300個以上ありました。
A列の文字があれば、B列の文字に置換したいとのことでした。
Wordの文書は下のようになっていて、毎回、置換作業をしなければならないとのことです。
Wordの記録マクロで1文字を置換して記録してみたのですが・・・その後がわからない。
-
Wordの記録マクロの使い方(操作手順をマクロに記録して実行する)
Wordでは、操作手順をマクロに記録することができます。 [マクロの記録]操作を実行するには、まず[開発]タブを表示させます。 [表示]タブ ...
ネットで検索すると、有難いページがヒットしました。
ワードで複数の文字を一括・連続置換するマクロ - オフィス系ソフト - 教えて!goo
上記ページを参考にして作成することができました。
(^人^)感謝♪です。
関連大文字と小文字、半角と全角を区別して置換する方法は、半角と全角を区別して置換する方法で解説しています。
あいまい検索の置換マクロ
まず、置換表のExcelブックをCSVファイルに変換しました。
CSVファイルに変換して保存
[名前を付けて保存]ダイアログボックスで[CSV(カンマ区切り)(*.csv)]を選択して、保存します。
VBEを起動
[開発]タブから[Visual Basic]をクリックして起動します。
参考[開発]タブを表示していなければ、[Wordのオプション]を表示して[リボンのユーザー設定]から設定してください。開発タブの表示が参考になると思います。Office2010での解説ですが、設定方法は同じです。
-
[開発]タブの表示とマクロのセキュリティ設定
Office2010から[開発]タブを表示する方法が変わりました。 Office2010以降は[オプション]ダイアログボックスの[リボンのユ ...
VBEは、[Alt]キーと[F11]キーを同時に押しても表示させることができます。[開発]タブを表示していなくてもOKです。
標準モジュールへ入力
[挿入]から[標準モジュール]をクリックします。
そして、そこへ下のコードを貼り付けます。
CSVのパスは変更してください。
ファイルのパスを確認する方法は、パスとしてコピーを参照してください。
Sub 置換()
Open "C:\Users\hama1\Documents\sample\記号置換表.csv" For Input As #1
While Not EOF(1)
Line Input #1, a
s = Split(a, ",")
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = s(0)
.Replacement.Text = s(1)
.Forward = True
.Wrap = wdFindContinue
End With
Selection.Find.Execute Replace:=wdReplaceAll
Wend
Close #1
End Sub
下のようにできたら、VBEは閉じます。
マクロを実行して確認
[開発]タブにある[マクロ]をクリックします。
ショートカットキーは、[Alt]+[F8]です。
[マクロ]ダイアログボックスに[置換]というマクロが表示されています。
選択して、[実行]ボタンをクリックします。
まとめて置換することができます。
参考[開発]タブを表示していない場合は、[表示]タブの[マクロ]グループにある[マクロ]をクリックしてください。
半角と全角を区別して置換するマクロ
上記マクロでは「あいまい検索」となっていて、半角や全角を区別して置換できないという問い合わせがありました。
例えば置換表に以下のように記していて、
以下の文字列を上記マクロで実行すると、
下のように同じ変換になってしまいます。
これは、あいまい検索で実行しているからです。
半角全角・大文字小文字の区別
[検索と置換]ダイアログボックスを表示して、[オプション]ボタンをクリックして展開します。
開くとわかるのですが、Wordの既定では、[あいまい検索]オンになっています。
では、大文字と小文字を区別、半角と全角も区別して検索する場合は、[検索オプション]で[あいまい検索]のチェックボックスをオフにして、[大文字と小文字を区別する]と[半角と全角を区別する]のチェックボックスをオンにします。
自動マクロを実行してコードを確認
この状態で記録マクロを作成してみました。
そうすると、下のようになっていました。
では、このコードを上記コードに追加してみます。
Sub 置換()
Open "C:\Users\hama1\Documents\sample\記号置換表.csv" For Input As #1
While Not EOF(1)
Line Input #1, a
s = Split(a, ",")
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = s(0)
.Replacement.Text = s(1)
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = True
.MatchWholeWord = False
.MatchByte = True
.MatchAllWordForms = False
.MatchSoundsLike = False
.MatchWildcards = False
.MatchFuzzy = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
Wend
Close #1
End Sub
これで実行してみると、きちんと変換できるようになりました。
Word2010でも動作確認しています。
マクロを作成した文書を保存するときは、[Wordマクロ有効文書(*.docm)]として保存します。
これって、他にも便利に使えそうです。
このマクロを全ての文書で実行できるようにする方法は、Wordのマクロを全ての文書で使えるようにするにはで解説しています。
-
特定の文書のマクロをすべての文書で使えるようにするには
特定の文書に保存されたマクロを全ての文書で使えるようにする方法です。 まず、マクロを作成した文書を開きます。 拡張子は[.docm]ですね。 ...
置換後の文字に書式設定
置換後の文字を太字で、赤い色にしたい場合は、
End With
Selection.Find.Execute Replace:=wdReplaceAll
上記コードの間に追記してください。
End With
With Selection.Find.Replacement.Font
.Bold = True
.Color = wdColorRed
End With
Selection.Find.Execute Replace:=wdReplaceAll
また、置換後の文字列を蛍光ペンでハイライトしたい場合は、以下のようにしてください。蛍光ペンの色は先に選択してから実行してください。
With Selection.Find.Replacement
.Highlight = True
End With
蛍光ペンについては、以下の記事で解説しています。
-
蛍光ペンを使ってマーキングするには(一括設定・一括置換)
Wordには、[蛍光ペン]という文字列をマーキングできる機能があります。[ハイライト]とも呼ばれています。 書式設定と同じ操作で、文字列を選 ...
関連Wordの[検索と置換]の関連記事です。
-
タブ文字を一括削除するには置換機能で[タブ文字]を指定して置換
Excelで作成された文書をコピーして、Wordへ貼り付けると下のように多くのタブが挿入されてしまうことがあります。 この不要なタブ文字をま ...
-
改ページを一括削除するには[置換]操作で
Wordで改ページを一括で削除する方法です。 ここでは、Word2013で解説しますが、他のバージョンのWordも同じ操作です。 改ページは ...
-
行区切りをまとめて削除(任意指定の行区切りを指定して置換)
ウェブページの文章をコピーしてWordに貼り付けすると、改行マークがたくさんあって邪魔に感じることがあります。 この行区切りを一括で削除する ...
-
文字列を画像に一括置換(特殊文字の[クリップボードの内容]を利用)
置換用の特殊文字の中には[クリップボードの内容]というのがあります。 これは、クリップボードに保存されている内容(アイテム)ということです。 ...
Wordの記録マクロについては、以下の記事で解説しています。
-
Wordの記録マクロの使い方(操作手順をマクロに記録して実行する)
Wordでは、操作手順をマクロに記録することができます。 [マクロの記録]操作を実行するには、まず[開発]タブを表示させます。 [表示]タブ ...