Word VBAで文字列を置換する方法!いくつかの基本パターンを徹底解説


replace

photo credit: Chendragon2 Induction Rice Cooker Teardown via photopin (license)

みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

Word VBAでいろいろな検索や置換をする方法についてシリーズでお伝えしています。

前回の記事はコチラでした。

Word VBAで選択範囲のフォント設定を変更する方法とそのプロパティまとめ
Word VBAで色々な検索&置換をする方法についてお伝えしています。今回はWord VBAでFontオブジェクトを使ってフォントの設定を変更する方法と、そのプロパティを一覧で一挙にまとめました。

カーソル位置から先の範囲について連続して検索する方法についてお伝えしました。

前回は検索にヒットした文字列について蛍光ペンでハイライトをしたり、Fontオブジェクトで文字書式を変更したりしたのですが、今回変更するのは文字そのもの、つまり「置換」をしていきます。

Word VBAで置換をする方法はいくつかありますので、それぞれ紹介していきますね。

Executeメソッドの引数ReplaceとReplaceWith、Replacementオブジェクトなど、ポイントとなる情報が盛りだくさんでお送りします。

では、行ってみましょう!

スポンサーリンク

検索結果のTextプロパティを変更する方法

まずは、前回紹介した以下プロシージャをベースした方法です。

おさらいを兼ねて紹介します。

Sub findText()

With Selection.Find
    .Text = "Word"
    Do While .Execute
        Selection.Font.Underline = True
    Loop
End With

End Sub

カーソル位置以降の「Word」という文字列に下線を引くというものです。

Do While文の中の処理を「テキストを変更する」という内容に変更していけばよさそうですね。

まず、Selectionオブジェクトの文字範囲であるRangeオブジェクトを取得して

Selection.Range

文字範囲のテキストを表すTextプロパティの値を変更するという段取りです。

Rangeオブジェクト.Text = 文字列

つまりプロシージャとしては

Sub replaceText()

With Selection.Find
    .Text = "Word"
    Do While .Execute
        Selection.Range.Text = "ワード"
    Loop
End With

End Sub

となります。

Selection.Textではダメな理由

実は、Word VBAはSelectionオブジェクトからRangeオブジェクトを取り出さなくても、直接Textプロパティを操作することができます。

Selection.Text = 文字列

ですから、このようなプロシージャも思いつくのです。

Sub replaceText()

With Selection.Find
    .Text = "Word"
    Do While .Execute
        Selection.Text = "ワード"
    Loop
End With

End Sub

ただ、このプロシージャですと、カーソル位置の直後でヒットした文字列だけ置換して終了します。というのも、実行してみればわかるのですが

Word VBAで置換した文字列が選択範囲になる

置換した文字列が選択範囲になります。次のExecuteメソッドの実行はこの選択範囲内に対しての検索になってしまうので、マッチする文字列がなくFlaseになるため、Do While文の繰り返しから抜けてしまうのです。

ですから、Textプロパティの値の変更を行ってもSelectionが「範囲にならないよう」にする必要があるのです。

RangeオブジェクトのTextプロパティに対して値変更をした場合には、置換後の文字列は選択範囲にならず、文字列の先頭にカーソルが配置されます。

Word VBAで置換後の文字列が選択範囲にならない

ですから、次回のExecuteメソッドの検索範囲は文書のカーソル以降となります。

「全て置換」をする方法

Executeメソッドの引数Replaceを指定する

カーソル以降の全ての文字列を置換する方法はもう一つあります。

Executeメソッドの名前付き引数Replaceを指定する方法です。

Selection.Execute Replace:=WdReplace定数

Replaceには置換の実行方法について表すWdReplace定数を指定します。

定数 置換の方法
wdReplaceNone 置換しない(既定値)
wdReplaceOne 1つだけ置換
wdReplaceAll 全て置換

つまり、引数ReplaceにwdReplaceAllを指定すれば、全て置換ができるというわけです。

Executeメソッドの引数ReplaceWithを使う

ただ、置換をするのであれば、どの文字列に変更をするのかを指定しなければいけません。

その指定の方法もいくつかありまして、一つ目はExecuteメソッドの名前付き引数ReplaceWithを使う方法です。

Selection.Execute ReplaceWith:=文字列

これらを活用すると以下のようなプロシージャとなります。

Sub replaceText()

With Selection.Find
    .Text = "Word"
    .Execute Replace:=wdReplaceAll, replacewith:="ワード"
End With

End Sub

かなりシンプルに記述できますね。

Replacementオブジェクトを使う方法

もう一つの方法が、Replacementオブジェクトを使う方法です。

ReplacementオブジェクトはFindオブジェクトの配下にある置換条件を設定するためのオブジェクトです。

Findオブジェクト.Replacement

ReplacementオブジェクトのTextプロパティで置換後の文字列を指定することができます。

Replacementオブジェクト.Text = 文字列

また、Replacementオブジェクトは配下にFontオブジェクトを持ちますので、置換と同時に文字書式の変更を施すことも可能です。

Replacementオブジェクト.Font

実際にプログラム内で使う場合は以下のように記述をすればOKです。

Sub replaceText()

With Selection.Find
    .Text = "Word"
    With .Replacement
        .Text = "ワード"
        .Font.Size = 24
        .Font.Underline = True
    End With
    .Execute Replace:=wdReplaceAll
End With

End Sub

このプロシージャを実行すると、以下のように置換されます。

Word VBAで置換と同時にフォント設定

すっかりダサい文書になりました。

まとめ

Word VBAで文字列の置換をするいくつかの方法についてお伝えしました。

どれを使うか迷ってしまいそうですが、以下のような使い分けが良いでしょう。

  • 単純に文字列の置換だけを行うのであれば、Executeメソッドの引数ReplaceをwdReplaceAllにしつつ、引数ReplaceWithに置換後の文字列を設定
  • 置換後の文字列に文字書式の設定もしたいのであれば、Replacementオブジェクトを設定しつつ、Executeメソッドの引数ReplaceをwdReplaceAllに設定
  • 文字列の置換、文字書式の設定以外に何かしらかの処理を施したいのであれば、Do While~Loop文

次回は、検索条件に目を向けて、いろいろな条件設定の仕方についてお伝えしますね。

Word VBAで検索オプションを設定して検索をする方法とそのプロパティ一覧
Word VBAで色々な検索や置換をする方法についてお伝えしています。今回はWord VBAで検索オプションを設定して検索をする方法をお伝えしつつ、その設定をするプロパティ一覧ををまとめています。

どうぞお楽しみに!

連載目次:Word VBAで色々な検索&置換をする方法

Word VBAのFindオブジェクトを使えば色々な条件で目的を探し当てて置換、書式設定、その他、いろいろな処理を施すことができます。Word VBAの検索の最初の一歩から順番にお伝えしていきます!
  1. Word VBAで文字列を検索するFindオブジェクトを使った最も基本のプログラム
  2. Word VBAでカーソル位置から連続で検索をして蛍光ペンでハイライトをする
  3. Word VBAで選択範囲のフォント設定を変更する方法とそのプロパティまとめ
  4. Word VBAで文字列を置換する方法!いくつかの基本パターンを徹底解説
  5. Word VBAで検索オプションを設定して検索をする方法とそのプロパティ一覧
  6. Word VBAで検索の方向を変更する方向と文書全体を検索する方法
  7. Word VBAでワイルドカードを使ったパターン検索をする方法
  8. Word VBAでワイルドカードを使ってパターンで超便利な置換をする方法

タイトルとURLをコピーしました