段落単位で置換できる(Word)
段落単位で置換できる
Wordで、特定の範囲だけ置換したかった。
目次
標準機能による置換
普通、置換はこうする。
画像中に示した、「《 》
」でくくられた箇所を置換したいとき、[Ctrl] + [ H ]
で置換ダイアログを呼び出して、
このようにすればよい。
しかし、これだと当たり前のことながら、文書全体の当該箇所が根こそぎ置換されてしまう。
もちろん、必要な範囲のみ選択した状態で実行すれば良いが、それは単に〝手動〟なのであって、あまり有効な解決策とは言えない。
Find.Executeメソッドによる置換
たとえば、次のリスト1を実行するとどうか。
リスト1 標準モジュール
Private Sub test01() Call Selection.Find.Execute(FindText:="《*》", _ ReplaceWith:="", _ Replace:=wdReplaceAll, _ MatchWildcards:=True) End Sub
こいつを実行するとどうなるか。
カーソルのある場所以降の部分のみ置換されるのである。
これは実に便利な仕様。
しかし、これは〝どこから〟しか指定できないことを意味する。
段落単位でFind.Executeメソッドを使う
Wordでは、段落単位で文書の断片を取得することができる。
[Document].Paragraphs
コレクションのインデックスを指定すれば良いのである。
たとえば、18
番目~21
番目の段落の部分のみ置換を実行したければ、次のようなコードを書けば良い。
リスト2 標準モジュール
Private Sub test02() Dim Doc As Document Set Doc = ActiveDocument Dim i As Long For i = 18 To 21 With Doc.Paragraphs(i) Call .Range.Find.Execute( _ FindText:="《*》", _ ReplaceWith:="", _ Replace:=wdReplaceAll, _ MatchWildcards:=True) End With Next End Sub
見ての通り、18
~21
の各段落に順に[Range].Find.Execute
メソッドを実行して置換している。
結果はこの通り。
見事に狙った箇所のみ置換することに成功している。
おわりに
これで、置換を施したい対象箇所の始めと終わりに、当該文書内では出てこないような文字列(「@@@」とか。)を目印として置いておき、その段落を取得するようにすれば、文書内の狙った範囲の箇所にのみ置換を実行することができる。
段落番号を取得するやつは、
このときに作成済み。