
photo credit: wuestenigel Nüsse, Samen und Hülsenfrüchte in Japan via photopin (license)
みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。
Word VBAで色々な検索や置換をする方法についてお伝えしています。
前回の記事はこちら。

Word VBAで置換をする方法についてお伝えしました。
今まで紹介してきました検索や置換は単純にマッチする文字列を探してくるだけだったのですが、ほら、Wordの検索機能には全角と半角を区別して検索したり、アルファベットの大文字と小文字を区別したり、細やかな設定ができますでしょ。
Word VBAでもそれらの細かな条件を設定した検索が可能です。
ということで、今回はWord VBAで検索オプションを設定して検索をする方法をお伝えしつつ、その設定項目をまとめてお伝えします。
では、行ってみましょう!
デフォルトの状態で置換をする
まず、お題として以下のようなWord文書を用意しました。
「Word」という言葉ですが、少しずつパターンを変えて4つ用意しました。半角&全角、そして先頭文字がお大文字&小文字という組み合わせです。
この文書の先頭にカーソルを置いた状態で、以下のプロシージャを実行してみます。
Sub replaceText()
With Selection.Find
.Text = "Word"
.Replacement.Text = "ワード"
.Execute Replace:=wdReplaceAll
End With
End Sub
「Word」という単語を「ワード」に置換する内容ですからね、実行をすると…
このように全部「ワード」に置換されました。
Word VBAでの置換は、デフォルトでは全角と半角の違いも、大文字と小文字の違いも区別されないんですね。
MatchCaseプロパティで大文字と小文字を区別を設定する
では、まず大文字と小文字の区別をするように設定しましょう。
FindオブジェクトのMatchCaseプロパティを使います。
Trueにすると検索時に大文字と小文字を区別するようになります。
プロシージャにこの設定を追加しましょう。
Sub replaceText()
With Selection.Find
.Text = "Word"
.MatchCase = True
.Replacement.Text = "ワード"
.Execute Replace:=wdReplaceAll
End With
End Sub
置換前のWord文書に対してこのプロシージャを実行してみましょう。
すると、このように頭文字が小文字の「word」は半角、全角ともに置換されませんでした。検索オプションが効いていますね。
MatchByteプロパティで全角と半角の区別を設定する
では、続いて全角と半角を区別するように設定をしましょう。
MatchByteプロパティを使います。
Trueに設定をすると全角と半角を区別して検索をするようになります。
では、先ほどのMatchCaseプロパティの設定を、MatchByteプロパティの設定に変更をしました。
Sub replaceText()
With Selection.Find
.Text = "Word"
.MatchByte = True
.Replacement.Text = "ワード"
.Execute Replace:=wdReplaceAll
End With
End Sub
これを置換前のWord文書に対して実行してみると…
おや?
全角の文字列が置換されなかったのは良いのですが、なぜか半角の「word」が置換されていませんね…
Word VBAの検索オプション設定は「重ね掛け」
この謎を解き明かしてみましょう。
Wordで Ctrl + F でナビゲーションメニューを開いて、検索メニューのオプションを選択してみてください。
すると、「検索オプション」ウィンドウで現在の検索オプションの状態を確認できるのですが、以下のように
- 大文字と小文字を区別する
- 半角と全角を区別する
の両方にチェックが入っています。
つまり、検索オプションの設定は「重ね掛け」になるんですね。プロシージャ実行時の設定が生きたままリセットされません。
Wordアプリケーションを立ち上げ直すと検索オプションがリセットされますが、Wordを立ち上げたまま、設定が異なる検索を複数回行うのであれば、以下のように関係するプロパティのTrue・Falseを都度設定をするのが安心です。
Sub replaceText()
With Selection.Find
.Text = "Word"
.MatchByte = True
.MatchCase = False
.Replacement.Text = "ワード"
.Execute Replace:=wdReplaceAll
End With
End Sub
そうすれば、以下のように全角と半角の区別だけをみて検索ができるようになります。
検索時に設定できる検索のオプション一覧
Wordには、その他にも検索オプションの設定項目はたくさんあり、デフォルトの状態の検索オプションは以下のような状態になっています。
この設定一つ一つにFindオブジェクトのプロパティが対応をしていますので、以下表にまとめました。
プロパティ | 既定値 | 検索オプションの設定 |
---|---|---|
MatchCase | False | 大文字と小文字を区別する |
MatchWholeWord | False | 完全に一致する単語だけを検索する |
MatchWildcards | False | ワイルドカードを使用する |
MatchSoundsLike | False | あいまい検索(英) |
MatchAllWordForms | False | 英単語の異なる活用形も検索する |
MatchPrefix | False | 接頭辞に一致する |
MatchSuffix | False | 接尾辞に一致する |
MatchByte | False | 半角と全角を区別する |
IgnoreSpace | False | 空白文字を無視する |
IgnorePunct | False | 句読点を無視する |
MatchFuzzy | True | あいまい検索(日) |
以下、いくつかの設定について補足しますね。
完全に一致する単語だけを検索するMatchWholeWordプロパティ
設定内容については、その名前通りです。けっこう使いどころが多そうな印象がありますが、残念ながら単語の前後に半角スペースがないと機能しません。日本語ではちょっと使いづらいですね。
あいまい検索(英)MatchSoundsLikeプロパティ
日本語の呼び名よりも、プロパティ名のほうが説明としてはわかりやすいですね。Trueにすると、なんと発音が同じ英単語も含めて検索をするそうです。英語あまり使わないからわからないのですが、使いどころあるんでしょうか…。
あいまい検索(日)MatchFuzzyプロパティ
Trueにすると、ひらがなとカタカナや、「広」と「廣」などの漢字の異体字などの区別をなくして検索をします。
まとめ
Word VBAで検索オプションを設定して検索をする方法と、オプションに対応をするプロパティ一覧を紹介しました。
よく使うプロパティはMatchCaseプロパティ、MatchByteプロパティあたりでしょうか。
注意点としては、Wordアプリケーションを起動している間は、検索オプションは重ね掛けになりますので、実行のたびに必要に応じてFalseにすることを忘れないようにして下さいね。
次回は、Word VBAで検索の範囲や方向をコントロールする方法についてお伝えします。

どうぞお楽しみに!