みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。
初心者向けにWord VBAで様々な文字入力をするマクロの作り方をシリーズでお伝えしています。
前回の記事はこちら!
Wordで段落記号を入力する方法についてお伝えしまして、これでカーソル位置や選択範囲に文字列や段落記号を入力することができるようになりました。
ですが、とある選択範囲の前後に文字列を挿入したい場合はどうすればよいでしょうか?
「—– ここから —–」~「—– ここまで —–」みたいなやつです。
これ、マクロ化してショートカットキーに登録できたら、けっこう便利だったりしませんか?
ということで今回は、Word VBAで選択範囲の前後に文字列を挿入する方法です。
では、行ってみましょう!
選択範囲の前後に文字列を挿入したい
以下のようなWord文書があります。ちょうど、HTMLのimgタグが入力されている段落範囲を選択している状態です。
この状態のときに、何らからのショートカットキーが入力されたら、その瞬間に以下の図のようにしたいのです。
つまり
- 選択範囲の前に「—– ここから —–」
- 選択範囲の後に「—– ここまで —–」
とそれぞれ入力したいということです。
選択範囲に対するtypeTextメソッドは差し替えになる
選択範囲はSelectionオブジェクトで表せます。文字入力なら、前回までお伝えしてきたtypeTextメソッドがあるのですが、うっかり以下のようなプロシージャを作成して実行してしまうと…
Sub insertText()
Selection.typeText "----- ここから -----"
End Sub
選択範囲が、うっかり全部消えてしまいます…!
typeTextメソッドを使うと、選択範囲の差し替えになっちゃうんでしたね。
だから今回のケースでは、typeTextメソッドは使えないのです。
insertBeforeメソッドで選択範囲の前に文字列を挿入する
今回のケースでは、選択範囲の「前」または「後」に文字列を挿入したいわけですよね。
まず、選択範囲の前に文字列を挿入する場合、Word VBAではinsertBeforeメソッドを使います。
書き方はこちら。
では、早速…imgタグの段落範囲を選択した状態で、以下プロシージャを作成して実行してみましょう。
Sub insertText()
Selection.InsertBefore "----- ここから -----"
End Sub
実行すると…おや?
改行…つまり段落記号を入力したいですよね。
そんな場合は、前回記事の組み込み定数vbCrを使って
Sub insertText()
Selection.InsertBefore "----- ここから -----" & vbCr
End Sub
とします。これで実行をしますと…
このように想定通りの入力がされました。
ここで、一点注目してほしいのですが、選択範囲が元の選択範囲よりも前方向に広がっていますよね?
そうなんです。insertBeforeメソッドで挿入した文字列も選択範囲に吸収されて選択範囲が広がるんですね。
この特性はかなり重要なので、よ~く覚えておいて下さいね。
insertAfterメソッドで選択範囲の後に文字列を挿入する
さて、続いて後ろに「—– ここまで —–」と挿入していきましょう。
選択範囲の後に文字列を挿入する場合、insertAfterメソッドを使います。
書き方はこうです。
先ほどのinsertBeforeに続ける形で処理を追加しましょう。というのも、insertBeforeを実行した後でも選択範囲のEndは変わりませんでしたからね。都合が良いです。
では、imgタグの段落範囲を選択した状態で、以下プロシージャを作成して実行です。
Sub insertText()
Selection.InsertBefore "----- ここから -----" & vbCr
Selection.InsertAfter "----- ここまで -----" & vbCr
End Sub
Word文書を見てみると、無事に前後に目的通りの文字列が挿入されています。
そして、insertAfterメソッドでも同様に、元の選択範囲に加えて挿入した文字列のところまで選択範囲が広がっていますよね。
insertBeforeメソッド、insertAfterメソッドはともにSelectionオブジェクトの範囲が広がりますので、この特性を覚えておくと良いです。
なにせ、じゃんじゃん選択範囲を広げながら、文字列を追加できますからね。
まとめ
Word VBAで選択範囲の前後に文字列を挿入する方法をお伝えしました。
insertBeforeメソッドで選択範囲の前、insertAfterメソッドで選択範囲の後に文字列を挿入します。
また、これらのメソッドを実行した結果、挿入した文字列分まで選択範囲が広がるという特性もぜひ覚えておいてくださいね。typeTextメソッドでは選択範囲がクリアされますからね。
さて次回ですが、せっかく作ったこのマクロ…これをショートカットキーに登録する方法についてお伝えします。
どうぞお楽しみに!
連載目次:初心者向けWord VBAで文字入力をしてみよう
お仕事でよく使う文書作成ソフトWord。実は、WordでもVBAでプログラミングができるんです。本シリーズでは、初心者向けとしてWord VBAで文字入力をする方法をお伝えしていきます。- Word VBA入門の最初の一歩!マクロ作成準備の6つのステップ
- Word VBAでカーソル位置に文字を入力するとっても簡単なプログラム
- Word VBA初心者がまず押さえておくべき段落記号の入力方法
- Word VBAで選択範囲の前後に文字列で挿入するマクロを作る方法
- Word VBAで作成したマクロをショートカットキーに登録する方法
- Word VBAを使うなら知っておくべき「段落」の話とその操作方法
- Word VBAで選択範囲の最初の段落&最後の段落を取得する方法
- Word VBA初心者にちゃんと理解して欲しいスタイルとその設定をする方法
- Word VBAでWithステートメントを使って同一オブジェクトの表記をスッキリ書く方法
- Word VBAでフォームを表示&コマンドボタンでマクロを実行する方法
- Word VBAでフォームをEscキーで閉じるようにするテクニック
コメント
勉強させてもらってます。
insertAfterメソッドで選択範囲の後に文字列を挿入するの下にある例文の一箇所に&が抜けているようです。
ご指摘ありがとうございます!
おっしゃる通りでした…修正させていただきます。