Word VBAで文書全体で全角スペースのみを検索する方法

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

Word VBAで複数のドキュメントを一括処理するマクロの作り方をシリーズでお伝えしてきました。

前回の記事はコチラ。

Word VBAで複数のドキュメントファイルを一括処理して名前を付けて保存する方法
Word VBAで複数ファイルを一括処理するマクロの作り方についてお伝えしています。今回はWord VBAで複数ファイルを処理してSaveAs2メソッドで名前を付けて保存する方法をお伝えします。

フォルダ内の全てのドキュメントについて、フォントの種類を変更して別名で保存するプロシージャを紹介しました。

さて、今回は趣向を変えますよ。

というのも、段落の冒頭…Wordのインデント機能ではなくて、全角スペースにしちゃったドキュメントがいっぱいあるのです。

それを一括で直したい…というわけです。

つまり、Word VBAで段落の冒頭が全角スペースならインデントに変更するマクロを作りたい!というわけです。

今回は、その最初の一歩として、Word VBAで全角スペースを検索する方法をお伝えします。

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

スポンサーリンク

段落の冒頭が全角スペースになっている原稿

まずは、お題の確認といきましょう。

こちらの文書を見て下さい。

段落の冒頭がインデントだったりスペースだったりするWord文書

段落の冒頭が全角スペースだったり、インデントだったり…統一性がないんですね。

ていうか、そもそもスペースによる字下げと、インデントによる字下げって何が違うんでしょうか?

スペースとインデントの違い

それは、メモ帳などのテキストエディタにコピペをしてみるとわかります。

Wordの段落をメモ帳に貼り付けた

全角スペースを入れていた段落は当然、全角スペースが1文字入っているのですが、インデントをしていた段落に関しては何のスペースもありませんね。

つまり、インデントによる字下げは、文字としては「なし」なわけです。

テキストエディタやいろいろなところに貼り付ける機会があるとすると、スペースがあったり、なかったりの混在状態はいい迷惑なわけで、どちらかに統一しておくのがジェントルなわけです。

ということで、これを統一するマクロを作っていこうということになります。

全角スペースを検索する

では、まずは単一文書で全角スペースを1文字分のインデントに変更をするマクロを作ることを考えます。

こんな方針ではどうでしょう。

  1. 全角スペースを検索する
  2. 検索した全角スペースが段落の1文字目であれば
    • 全角スペースを削除
    • インデントを1文字挿入

てな方針です。

ということで、今回は1の全角スペースを検索するというところを目指していきます。

全角スペースを連続して検索する

手始めに、以下のような、全角スペースのみを検索して都度Stopするプロシージャを作ってみました。

Sub removeSpaces()

With Selection.Find
    .Text = " "
    Do While .Execute
        Stop
    Loop

End With

End Sub

Findオブジェクトの設定として、Textプロパティは全角スペースを設定しています。

Findオブジェクト.Text = 検索文字列

5行目、Executeメソッドは検索がヒットしている間はTrueを返しますので、その間はDo While~Loop文の繰り返しがされます。

つまり、Findオブジェクトにヒットする限り全て検索するというわけですね。詳細は以下記事を参考ください。

Word VBAでカーソル位置から連続で検索をして蛍光ペンでハイライトをする
Word VBAで色々な検索&置換をする方法についてお伝えしています。Word VBAで連続して検索して蛍光ペンでハイライトをする方法についてお伝えします!Executeメソッドのイケてる機能がポイントです。

ただし、このプロシージャでは文書の末尾まで到達したら検索が終了します。Selectionが文書の途中だった場合は、それより以前の範囲が無視されてしまうんです。

文書全体から全角スペースを検索する

それで、追加をしなければならないのが、Wrapプロパティです。

Findオブジェクト.Wrap = WdFindWrap定数

Wrapプロパティに定数wdFindContinueを設定すると、全ての文書について検索をするということになります。

以下記事もご覧ください。

Word VBAで検索の方向を変更する方法と文書全体を検索する方法
Word VBAでいろいろな検索や置換をする方法についてお伝えしています。今回はForwardプロパティで検索方向を変える方法、Wrapプロパティで文書全体を検索する方法についてお伝えします。

Wrapプロパティの設定を追加したプロシージャがこちらです。

Sub removeSpaces()

With Selection.Find
    .Text = " "
    .Wrap = wdFindContinue
    Do While .Execute
        Stop
    Loop

End With

End Sub

しかし、これを実行すると…

Word VBAで半角スペースもヒットした

このように半角スペースもヒットしちゃいますね。

MatchByteプロパティで半角と全角を区別する

いったん、Wordに戻って、「検索オプション」を見てみましょうか。

Word VBAで設定できるプロパティは、たいがいWordのオプションでも設定できますから。

Word VBAの検索オプション

「半角と全角を区別する」という項目がありますね。当然スペースにも当てはまります。

つまり、MatchByteプロパティに当たりますね。

Findオブジェクト.MatchByte = True

詳細は以下記事もご覧下さい。

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

いったん、プロシージャの実行をリセットしてから、以下のようなプロシージャを実行してみましょう。

Sub removeSpaces()

With Selection.Find
    .Text = " "
    .Wrap = wdFindContinue
    .MatchByte = True
    Do While .Execute
        Stop
    Loop

End With

End Sub

すると、半角スペースについてはヒットしなくなりますし、検索オプションを確認すると「半角と全角を区別する」がオンになっていますね。

Word VBAの検索オプションで半角と全角が区別されている

まとめ

Word VBAで全角スペースのみを検索する方法についてお伝えしました。

Wordの検索をVBAで実施する方法について復習ができたものと思います。

次回は、検索結果の全角スペースが段落の最初の文字かどうかという判定をする方法をお伝えします。

Word VBAで検索した結果の段落とその範囲の開始位置を取得する方法
Word VBAで段落の冒頭の全角スペースをインデントに変更するマクロを作っています。今回は検索した全角スペースが含まれる段落を取得する、またその段落範囲の開始位置を取得する方法をお伝えします。

どうぞお楽しみに!

連載目次:Word VBAで全角スペースをインデントに一括変更する

Wordで文書を作成するときに、段落の冒頭をうっかり全角スペースにしてしまったりすることありますよね。全部インデントに統一しておきたい、そんなときに使える一括変更マクロを作っていきます。
  1. Word VBAで文書全体で全角スペースのみを検索する方法
  2. Word VBAで検索した結果の段落とその範囲の開始位置を取得する方法
  3. Word VBAで段落先頭の全角スペースを一括でインデントに変更するマクロの作り方
タイトルとURLをコピーしました