やりたいこと
PowerPointで、全文でなく選択範囲内からテキスト検索し、検索結果を指定のテキストに置換したい。
マクロの作り方
まずは下記のようなユーザーフォームを作る。
ユーザーフォームに下記のようなコードを埋め込む。
UserForm1.frm
Option Explicit
Private MyRng As TextRange
Private Found As TextRange
'「置換」ボタンを押したとき
Private Sub btnRep_Click()
On Error GoTo ErrMessage
Set MyRng = ActiveWindow.Selection.TextRange
Set Found = MyRng.Replace(SearchText.text, RepText.text)
Found.Select
Exit Sub
ErrMessage:
MsgBox "検索を行う範囲を選択してください"
End Sub
'「次を置換」ボタンを押したとき
Private Sub btnRepNext_Click()
On Error GoTo ErrMessage
With Found
Set Found = MyRng.Replace(SearchText.text, RepText.text, .Start + .length - 1)
If Not (Found Is Nothing) Then
Found.Select
Else
MsgBox "見つかりません"
End If
End With
Exit Sub
ErrMessage:
MsgBox "検索を行う範囲を選択してください"
End Sub
'「すべて置換」ボタンを押したとき
Private Sub btnRepAll_Click()
On Error GoTo ErrMessage
Set MyRng = ActiveWindow.Selection.TextRange
Set Found = MyRng.Replace(SearchText.text, RepText.text)
Do While Not (Found Is Nothing)
With Found
Set Found = MyRng.Replace(SearchText.text, RepText.text, .Start + .length - 1)
End With
Loop
Set MyRng = Nothing
Set Found = Nothing
Exit Sub
ErrMessage:
MsgBox "検索を行う範囲を選択してください"
End Sub
標準モジュールから呼び出せるようにする。
Module1.bas
Option Explicit
Public Sub Sample()
UserForm1.Show vbModeless
End Sub
これで、選択範囲から指定のテキストを置換できるようになる。
使い方
-
まずは、置換したい範囲を選択する。
-
ひとつずつ置換するときは、最初に「置換」ボタンで置換し、2回目以降は「次を置換」ボタンを押す。
-
すべてを置換するときは、「すべて置換」ボタンを押す。
参考
- [TextRange.Find メソッド (PowerPoint)] (https://msdn.microsoft.com/ja-jp/library/office/ff744247.aspx)