Word VBAで選択範囲の前後に文字列で挿入するマクロを作る方法


text-before-after

photo credit: chrisjohnbeckett Writing in the sand, San Sebastian via photopin (license)

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

初心者向けにWord VBAで様々な文字入力をするマクロの作り方をシリーズでお伝えしています。

前回の記事はこちら!

Word VBA初心者がまず押さえておくべき段落記号の入力方法
初心者向けWord VBAで文字入力マクロの作り方をお伝えしています。今回は初心者のうちに知っておくべき段落記号の入力方法についてtypeParagraphメソッド・組み込み定数による方法をそれぞれお伝えします。

Wordで段落記号を入力する方法についてお伝えしまして、これでカーソル位置や選択範囲に文字列や段落記号を入力することができるようになりました。

ですが、とある選択範囲の前後に文字列を挿入したい場合はどうすればよいでしょうか?

「—– ここから —–」~「—– ここまで —–」みたいなやつです。

これ、マクロ化してショートカットキーに登録できたら、けっこう便利だったりしませんか?

ということで今回は、Word VBAで選択範囲の前後に文字列を挿入する方法です。

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

スポンサーリンク

選択範囲の前後に文字列を挿入したい

以下のようなWord文書があります。ちょうど、HTMLのimgタグが入力されている段落範囲を選択している状態です。

Word文書でimgタグの段落を選択

この状態のときに、何らからのショートカットキーが入力されたら、その瞬間に以下の図のようにしたいのです。

Wordで選択範囲の前後に文字列を挿入

つまり

  • 選択範囲の前に「—– ここから —–」
  • 選択範囲の後に「—– ここまで —–」

とそれぞれ入力したいということです。

選択範囲に対するtypeTextメソッドは差し替えになる

選択範囲はSelectionオブジェクトで表せます。文字入力なら、前回までお伝えしてきたtypeTextメソッドがあるのですが、うっかり以下のようなプロシージャを作成して実行してしまうと…

Sub insertText()

Selection.typeText "----- ここから -----"

End Sub

選択範囲が、うっかり全部消えてしまいます…!

Word VBAのtypeTextメソッドでは選択範囲の差し替えになる

typeTextメソッドを使うと、選択範囲の差し替えになっちゃうんでしたね。

だから今回のケースでは、typeTextメソッドは使えないのです。

insertBeforeメソッドで選択範囲の前に文字列を挿入する

今回のケースでは、選択範囲の「前」または「後」に文字列を挿入したいわけですよね。

まず、選択範囲の前に文字列を挿入する場合、Word VBAではinsertBeforeメソッドを使います。

書き方はこちら。

Selection.insertBefore 文字列

では、早速…imgタグの段落範囲を選択した状態で、以下プロシージャを作成して実行してみましょう。

Sub insertText()

Selection.InsertBefore "----- ここから -----"

End Sub

実行すると…おや?

Word VBAのinsertBeforeメソッドで文字列を挿入

改行…つまり段落記号を入力したいですよね。

そんな場合は、前回記事の組み込み定数vbCrを使って

Sub insertText()

Selection.InsertBefore "----- ここから -----" & vbCr

End Sub

とします。これで実行をしますと…

Word VBAのinsertBeforeメソッドで文字列と段落記号を挿入

このように想定通りの入力がされました。

ここで、一点注目してほしいのですが、選択範囲が元の選択範囲よりも前方向に広がっていますよね?

そうなんです。insertBeforeメソッドで挿入した文字列も選択範囲に吸収されて選択範囲が広がるんですね。

この特性はかなり重要なので、よ~く覚えておいて下さいね。

insertAfterメソッドで選択範囲の後に文字列を挿入する

さて、続いて後ろに「—– ここまで —–」と挿入していきましょう。

選択範囲の後に文字列を挿入する場合、insertAfterメソッドを使います。

書き方はこうです。

Selection.insertAfter 文字列

先ほどのinsertBeforeに続ける形で処理を追加しましょう。というのも、insertBeforeを実行した後でも選択範囲のEndは変わりませんでしたからね。都合が良いです。

では、imgタグの段落範囲を選択した状態で、以下プロシージャを作成して実行です。

Sub insertText()

Selection.InsertBefore "----- ここから -----" & vbCr
Selection.InsertAfter "----- ここまで -----" & vbCr

End Sub

Word文書を見てみると、無事に前後に目的通りの文字列が挿入されています。

Word VBAのinsertAfterメソッドで文字列と段落記号を挿入

そして、insertAfterメソッドでも同様に、元の選択範囲に加えて挿入した文字列のところまで選択範囲が広がっていますよね。

insertBeforeメソッド、insertAfterメソッドはともにSelectionオブジェクトの範囲が広がりますので、この特性を覚えておくと良いです。

なにせ、じゃんじゃん選択範囲を広げながら、文字列を追加できますからね。

まとめ

Word VBAで選択範囲の前後に文字列を挿入する方法をお伝えしました。

insertBeforeメソッドで選択範囲の前、insertAfterメソッドで選択範囲の後に文字列を挿入します。

また、これらのメソッドを実行した結果、挿入した文字列分まで選択範囲が広がるという特性もぜひ覚えておいてくださいね。typeTextメソッドでは選択範囲がクリアされますからね。

さて次回ですが、せっかく作ったこのマクロ…これをショートカットキーに登録する方法についてお伝えします。

Word VBAで作成したマクロをショートカットキーに登録する方法
初心者向けにWord VBAで便利な文字入力をするマクロの作り方シリーズ。今回は文書入力しながらサクサク使うために、Word VBAで作ったマクロをショートカットキーに登録する方法をお伝えします!

どうぞお楽しみに!

連載目次:初心者向けWord VBAで文字入力をしてみよう

お仕事でよく使う文書作成ソフトWord。実は、WordでもVBAでプログラミングができるんです。本シリーズでは、初心者向けとしてWord VBAで文字入力をする方法をお伝えしていきます。
  1. Word VBA入門の最初の一歩!マクロ作成準備の6つのステップ
  2. Word VBAでカーソル位置に文字を入力するとっても簡単なプログラム
  3. Word VBA初心者がまず押さえておくべき段落記号の入力方法
  4. Word VBAで選択範囲の前後に文字列で挿入するマクロを作る方法
  5. Word VBAで作成したマクロをショートカットキーに登録する方法
  6. Word VBAを使うなら知っておくべき「段落」の話とその操作方法
  7. Word VBAで選択範囲の最初の段落&最後の段落を取得する方法
  8. Word VBA初心者にちゃんと理解して欲しいスタイルとその設定をする方法
  9. Word VBAでWithステートメントを使って同一オブジェクトの表記をスッキリ書く方法
  10. Word VBAでフォームを表示&コマンドボタンでマクロを実行する方法
  11. Word VBAでフォームをEscキーで閉じるようにするテクニック

コメント

  1. 通りすがり より:

    勉強させてもらってます。
    insertAfterメソッドで選択範囲の後に文字列を挿入するの下にある例文の一箇所に&が抜けているようです。

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