「wordvba 選択範囲 置換」
といった検索が、このサイト『インストラクターのネタ帳』で行われていました。
選択されている範囲のみの文字列置換をWord VBAで行うには、どのようなコードを書けばいいのかを調べていらした方による検索でしょうか。
選択範囲内のみ文字列を置換するサンプルマクロ
Word文書上で、文字列を範囲選択しておいてから以下のWordマクロを実行してください。
If Selection.Start = Selection.End Then Exit Sub
Dim str_org As String, str_new As String
str_org = "Word"
str_new = "ワード"
With Selection.Find
.Text = str_org
.Replacement.Text = str_new
.Wrap = wdFindStop
.Execute Replace:=wdReplaceAll
End With
選択範囲内の「Word」が「ワード」に置換されます。
サンプルマクロで行っている処理
いろいろな実装方法がありそうですが、SelectionオブジェクトのFindプロパティを使って
Word.Findオブジェクトを取得するのが、シンプルなコードで済みそうです。
With Selection.Find .Text = str_org .Replacement.Text = str_new .Wrap = wdFindStop .Execute Replace:=wdReplaceAll
文字列の検索を行うWord VBAのコードに、文字列置換を行うためのReplacement.Textプロパティを使ったコードを入れ、
Find.Executeメソッドの引数Replaceに定数wdReplaceAllを指定しています。
範囲選択が行われていない場合、アクティブな文書全体で置換が行われることもあります。
それを避けるために、拙著『Excel VBAユーザーのためのWord VBA入門(1): Document・Range・Selectionの基本編』でも解説しているSelectionオブジェクトのStarプロパティ・Endプロパティを使ってチェックを行い、範囲選択されていなければ、マクロを終了する処理を事前に入れています。
If Selection.Start = Selection.End Then Exit Sub
また、選択範囲内で処理を確実に終わらせるため、念のためFind.Wrapプロパティに
定数wdFindStopを指定しています。
With Selection.Find .Text = str_org .Replacement.Text = str_new .Wrap = wdFindStop
- 『Excel VBAユーザーのためのWord VBA入門(1)』出ました。
- 『Word VBA入門』に登場するオブジェクトごとのプロパティ一覧
- 『Word VBA入門』に登場するオブジェクトごとのメソッド一覧
最終更新日時:2025-07-08 12:30
- Older:Range.Replaceメソッドの戻り値は?
Home » ワードマクロ・Word VBAの使い方 » Word.Findオブジェクト » Word VBAで選択範囲内のみ文字列を置換する