Wordで文書を編集しているときに、用語を統一したいときがあります。
例えば「エディター」を「エディタ」に揃えるような場合です。
置換機能を使えば簡単なのですが、対象となる用語が大量にある場合にはちょっと面倒です。
そこで変換用のリストを作っておき、それを元に連続して文字列を置換するマクロを作ってみました。
リスト
Wordの本文に次のようなリストを書いておきます。
置換前と置換後の文字列を並べ、セミコロン(;)で区切ります。
セミコロンのない行は無視されるので注釈などを書いておいてもかまいません。
エディター;エディタ
プリンター;プリンタ
サーバー;サーバ
プリンター;プリンタ
サーバー;サーバ
コード
次のコードを使います。
マクロを実行すると用語を統一したい文書ファイルを選ぶダイアログが出ます。
ファイルを選択するとそのファイルが開き、リストに従って次々に置換が実行されます。
Sub リストを元に連続して置換()
Dim mae(100)
Dim ato(100)
With Application.FileDialog(msoFileDialogFilePicker)
.Title = "ファイルを選択"
.AllowMultiSelect = False
.Show
filename = .SelectedItems(1)
End With
Set paras = ActiveDocument.Paragraphs
x = 0
For i = 1 To paras.Count
line = paras(i).Range.Text
temp = Split(line, ";")
If UBound(temp) > 0 Then
mae(x) = temp(0)
ato(x) = replace(temp(1), Chr(13), "")
x = x + 1
End If
Next i
Documents.Open filename:=filename
For i = 0 To x - 1
Set myRange = ActiveDocument.Range(Start:=0, End:=0)
With myRange.find
.ClearFormatting
.Text = mae(i)
With .Replacement
.ClearFormatting
.Text = ato(i)
End With
.Execute replace:=wdReplaceAll
End With
Next i
End Sub
Dim mae(100)
Dim ato(100)
With Application.FileDialog(msoFileDialogFilePicker)
.Title = "ファイルを選択"
.AllowMultiSelect = False
.Show
filename = .SelectedItems(1)
End With
Set paras = ActiveDocument.Paragraphs
x = 0
For i = 1 To paras.Count
line = paras(i).Range.Text
temp = Split(line, ";")
If UBound(temp) > 0 Then
mae(x) = temp(0)
ato(x) = replace(temp(1), Chr(13), "")
x = x + 1
End If
Next i
Documents.Open filename:=filename
For i = 0 To x - 1
Set myRange = ActiveDocument.Range(Start:=0, End:=0)
With myRange.find
.ClearFormatting
.Text = mae(i)
With .Replacement
.ClearFormatting
.Text = ato(i)
End With
.Execute replace:=wdReplaceAll
End With
Next i
End Sub
汎用的に実行する方法(2017年9月30日追記)
頻繁に上述のマクロを実行したい場合は次のようにします。
なお実際に試していませんので、どなたかに動作確認していただけるとありがたいです。
Normal.dotmにマクロをセットします。このファイルはWordを起動すると裏で自動的に開かれますので手間がかかりません。
そしてコードの中に置換リストを配列で持たせておきます。リストの載ったファイルをいちいち開く必要がなくなります。
こうすればクイックアクセスツールバーにマクロをセットすることができます。
手順は次の通りです。
- VBエディタを起動(Alt+F11)。
- プロジェクトエクスプローラ(左上の枠)の「Normal」を右クリックし、挿入 – 標準モジュール を選択。
- コードをセットする。
コードは次の通りです。
maeとatoという配列変数に置換前の文字列、置換後の文字列をセットします。
Sub リストを元に連続して置換()
Dim mae
Dim ato
mae = Array("エディター", "プリンター", "サーバー")
ato = Array("エディタ", "プリンタ", "サーバ")
For i = 0 To UBound(mae)
Set myRange = ActiveDocument.Range(Start:=0, End:=0)
With myRange.Find
.ClearFormatting
.Text = mae(i)
With .Replacement
.ClearFormatting
.Text = ato(i)
End With
.Execute Replace:=wdReplaceAll
End With
Next i
End Sub
Dim mae
Dim ato
mae = Array("エディター", "プリンター", "サーバー")
ato = Array("エディタ", "プリンタ", "サーバ")
For i = 0 To UBound(mae)
Set myRange = ActiveDocument.Range(Start:=0, End:=0)
With myRange.Find
.ClearFormatting
.Text = mae(i)
With .Replacement
.ClearFormatting
.Text = ato(i)
End With
.Execute Replace:=wdReplaceAll
End With
Next i
End Sub
コメント
[…] Excelで文字列リストを元に連続して置換するマクロ 2011 年 9 月 22 日 コメントをどうぞ コメント 以前、Wordで文字列リストを元に連続して置換するマクロについて書いたのですが、今度はExcel版です。 […]
ものすごく便利なマクロを作ってくださり、本当にありがとうございました。VBAのスキルがない私にとっては只々ありがたいばかりです。翻訳的な作業をしているのですが、おかげで大量の置換作業が捗りました。
お役に立てて嬉しいです。
このマクロをクイックアクセスツールバーに配置して、開いている文書から実行できるようにすることはできませんでしょうか。
>はまさん
今、手元にWordを扱う環境がないので確認できませんが、マクロをクイックアクセスツールバーにセットすることはできるはずです。
Excelの場合の手順は次の通りです。ほとんど同じだと思います。
http://stabucky.com/wp/archives/4881
返答ありがとうございます。クイックアクセスツールバーにセットすることはできました。
ただ、今開いている文書に直接置換を行うイメージで使用したいと思っています。
というのも、メールで送られてくる文書に置換を行いたいのですが、毎回保存しなければならないのが大変で・・・
VBAに置換リストを参照して置換を行う旨の記述をしないといけないのだとは思いますが、調べても参考になるサイトが見つからず難航しております。
>はまさん
確かに単にツールバーにセットするだけではダメみたいですね。難しそうなので約束はできませんが時間があるときに考えさせてください。
やはり難しそうですか…。
お手を煩わせて申し訳ありません。
>はまさん
汎用的に実行する方法を追記しました。置換リストをコードに埋め込んでしまう方法です。
なおテストしていませんので正しく動作するかどうか分かりません。
よろしくお願いします。
無事にできました。
ありがとうございました!
>はまさん
確認いただけましたか!ありがとうございます。
[…] Wordで文字列リストを元に連続して置換するマクロ 複数のWord文書に対して文字列置換 […]