みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。
Word VBAで複数のドキュメントを一括処理するマクロの作り方をシリーズでお伝えしてきました。
前回の記事はコチラ。
フォルダ内の全てのドキュメントについて、フォントの種類を変更して別名で保存するプロシージャを紹介しました。
さて、今回は趣向を変えますよ。
というのも、段落の冒頭…Wordのインデント機能ではなくて、全角スペースにしちゃったドキュメントがいっぱいあるのです。
それを一括で直したい…というわけです。
つまり、Word VBAで段落の冒頭が全角スペースならインデントに変更するマクロを作りたい!というわけです。
今回は、その最初の一歩として、Word VBAで全角スペースを検索する方法をお伝えします。
では、行ってみましょう!
段落の冒頭が全角スペースになっている原稿
まずは、お題の確認といきましょう。
こちらの文書を見て下さい。
段落の冒頭が全角スペースだったり、インデントだったり…統一性がないんですね。
ていうか、そもそもスペースによる字下げと、インデントによる字下げって何が違うんでしょうか?
スペースとインデントの違い
それは、メモ帳などのテキストエディタにコピペをしてみるとわかります。
全角スペースを入れていた段落は当然、全角スペースが1文字入っているのですが、インデントをしていた段落に関しては何のスペースもありませんね。
つまり、インデントによる字下げは、文字としては「なし」なわけです。
テキストエディタやいろいろなところに貼り付ける機会があるとすると、スペースがあったり、なかったりの混在状態はいい迷惑なわけで、どちらかに統一しておくのがジェントルなわけです。
ということで、これを統一するマクロを作っていこうということになります。
全角スペースを検索する
では、まずは単一文書で全角スペースを1文字分のインデントに変更をするマクロを作ることを考えます。
こんな方針ではどうでしょう。
- 全角スペースを検索する
- 検索した全角スペースが段落の1文字目であれば
- 全角スペースを削除
- インデントを1文字挿入
てな方針です。
ということで、今回は1の全角スペースを検索するというところを目指していきます。
全角スペースを連続して検索する
手始めに、以下のような、全角スペースのみを検索して都度Stopするプロシージャを作ってみました。
Sub removeSpaces()
With Selection.Find
.Text = " "
Do While .Execute
Stop
Loop
End With
End Sub
Findオブジェクトの設定として、Textプロパティは全角スペースを設定しています。
5行目、Executeメソッドは検索がヒットしている間はTrueを返しますので、その間はDo While~Loop文の繰り返しがされます。
つまり、Findオブジェクトにヒットする限り全て検索するというわけですね。詳細は以下記事を参考ください。
ただし、このプロシージャでは文書の末尾まで到達したら検索が終了します。Selectionが文書の途中だった場合は、それより以前の範囲が無視されてしまうんです。
文書全体から全角スペースを検索する
それで、追加をしなければならないのが、Wrapプロパティです。
Wrapプロパティに定数wdFindContinueを設定すると、全ての文書について検索をするということになります。
以下記事もご覧ください。
Wrapプロパティの設定を追加したプロシージャがこちらです。
Sub removeSpaces()
With Selection.Find
.Text = " "
.Wrap = wdFindContinue
Do While .Execute
Stop
Loop
End With
End Sub
しかし、これを実行すると…
このように半角スペースもヒットしちゃいますね。
MatchByteプロパティで半角と全角を区別する
いったん、Wordに戻って、「検索オプション」を見てみましょうか。
Word VBAで設定できるプロパティは、たいがいWordのオプションでも設定できますから。
「半角と全角を区別する」という項目がありますね。当然スペースにも当てはまります。
つまり、MatchByteプロパティに当たりますね。
詳細は以下記事もご覧下さい。
いったん、プロシージャの実行をリセットしてから、以下のようなプロシージャを実行してみましょう。
Sub removeSpaces()
With Selection.Find
.Text = " "
.Wrap = wdFindContinue
.MatchByte = True
Do While .Execute
Stop
Loop
End With
End Sub
すると、半角スペースについてはヒットしなくなりますし、検索オプションを確認すると「半角と全角を区別する」がオンになっていますね。
まとめ
Word VBAで全角スペースのみを検索する方法についてお伝えしました。
Wordの検索をVBAで実施する方法について復習ができたものと思います。
次回は、検索結果の全角スペースが段落の最初の文字かどうかという判定をする方法をお伝えします。
どうぞお楽しみに!