上書き翻訳などで利用するための一括置換の支援マクロ「ぱらぱら 」のユーザーの方から、「ページで範囲を指定して置換をすることができますか」と質問をいただきました。
ぱらぱらの場合、置換対象範囲をページで指定することはできません。
ただし、蛍光ペンやフォントの色で指定することができます。詳細は、こちらでご確認ください。
置換対象をページ指定する方法について気になったので調べてみました。
簡単なマクロを紹介します。
<目次>
このマクロでできること
マクロを実行するとページ番号を入力するダイアログボックスが表示されます。
数字を入力してください。
指定したページ内の語句を一括置換します。
マクロの解説
ページの範囲設定の方法がいくつか考えられたため、2つの方法で書きました。
マクロ1
12行目と15行目に設定しました。GoToメソッドで移動した結果をRangeオブジェクトに設定します。
さらに、ここからまたGoToメソッドを使ってページ全体を範囲に再設定しています。
このGoToメソッドの考え方は、Microsoft Excel MVPのインストラクターのネタ帳の伊藤さん の記事「ページを削除するWordマクロ 」に記載されています。
つまり、カーソルを特定ページにジャンプさせるダイアログボックス(Ctrl + G)で、[ページ番号]欄に、\page と入力すると現在ページ全体が選択されるというものです。
範囲を指定したら、あとは置換をするだけです。サンプルのマクロでは、「ワードマクロ」を「Wordマクロ」に置換しています。
マクロ2
こちらも、2ステップです。
最初に指定したページにカーソルを移動させます。
次に使うBookmarksのプロパティが、Selectionオブジェクトにしか対応していないため、Selectメソッドにて、実際にカーソルを移動しています。
Set myRange = Selection.Bookmarks("\page").Range
にて、カーソルがあるページ全体をRangeオブジェクトに設定します。
マクロ1
Sub 指定したページ内で置換する1()
Dim myRange As Range
Dim myPageNum As String
Do
myPageNum = InputBox("ページ番号を入力して下さい。")
If myPageNum = vbNullString Then Exit Sub
Loop While IsNumeric(myPageNum) = False
'ページの先頭にRangeオブジェクトを設定
Set myRange = ActiveDocument.GoTo(What:=wdGoToPage, Name:=myPageNum)
'Rangeオブジェクトのあるページ全体を範囲に再設定
Set myRange = myRange.GoTo(What:=wdGoToBookmark, Name:="\page")
With myRange.Find
.Text = "ワードマクロ"
.Replacement.Text = "Wordマクロ"
.Forward = True
.Wrap = wdFindStop
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
.Execute Replace:=wdReplaceAll
End With
Set myRange = Nothing
End Sub
マクロ2
Sub 指定したページ内で置換する2()
Dim myRange As Range
Dim myPageNum As String
Do
myPageNum = InputBox("ページ番号を入力して下さい。")
If myPageNum = vbNullString Then Exit Sub
Loop While IsNumeric(myPageNum) = False
'ページ先頭へ移動しカーソル位置を設定
ActiveDocument.GoTo(What:=wdGoToPage, Name:=myPageNum).Select
'カーソル位置のページをRangeオブジェクトの範囲に設定
Set myRange = Selection.Bookmarks("\page").Range
With myRange.Find
.Text = "ワードマクロ"
.Replacement.Text = "Wordマクロ"
.Forward = True
.Wrap = wdFindStop
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
.Execute Replace:=wdReplaceAll
End With
Set myRange = Nothing
End Sub





