みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。
初心者向けWord VBAを使って便利な入力ツールを作る方法をお伝えしています。
前回の記事はこちら。
Word VBAでの段落とその操作方法についてお伝えしました。
今回は、その続きになりますが、Word VBAで選択範囲の中から最初の段落と最後の段落を取得する方法をお伝えします。
つまり、SelectionオブジェクトからParagraphコレクションを取得して、その最初と最後のParagraphオブジェクトを取得するということですね。
また、段落内のテキストの取得をする方法も押さえておきたいですね。
では、行ってみましょう!
選択範囲の段落を取得する
選択範囲を表すオブジェクトはSelectionオブジェクトです。
選択範囲内の段落を集合として取得するには、以下のようにすればOKです。
これで、選択範囲に含まれる段落の集合をParagraphsコレクションとして取得することができます。
取得したParagraphsコレクションに含まれる段落のインデックス番号は1から始まり、上から順に振られていきます。
例えば、以下のようにめちゃめちゃな範囲選択をしていても、選択範囲の開始位置がある段落のインデックス番号が1、選択範囲の終了位置がある段落のインデックス番号が最後となり、この例では4となります。
Image may be NSFW.
Clik here to view.
最初の段落を取得するには
とすれば、選択範囲のうち最初の段落を取得することができます。
段落内のテキストを表示する
では、試しに取得した段落の文字列を出力してみましょう。
Wordの任意の範囲を選択しつつ、イミディエイトウィンドウに以下のように入力して Enter してみてください。
?Selection.Paragraphs(1).Range.Text
イミディエイトウィンドウには、以下のように表示されました。
Image may be NSFW.
Clik here to view.
命令的には
?Selection.Paragraphs(1).Text
としたくなりますが、これはダメです。Paragraphオブジェクトは段落を表していますが、範囲についての情報を持っていません。
Word VBAにおいて範囲はRangeオブジェクトが担当をしています。範囲がなければ文字列もないのですよ。
でも、Paragraphオブジェクトからその範囲を取得することはできますので、まずRangeプロパティで段落の範囲を取得してから
Paragraphオブジェクト.Range
その範囲内のテキストをTextプロパティで取得する
という段取りになります。
選択範囲の最後の段落を取得する
選択範囲の最初の段落については、インデックス番号1を使えば簡単に取得できますが、最後の段落はどのように取得しましょうか。
最後の段落数は、Paragraphsコレクションの要素数と等しいですから、Countプロパティを使えばよいですね。
この値がそのまま最後の段落のインデックス番号になります。
例えば、このようなプロシージャを用意しました。
Sub printParagraphs() Dim cnt As Long cnt = Selection.Paragraphs.Count Debug.Print Selection.Paragraphs(1).Range.Text Debug.Print Selection.Paragraphs(cnt).Range.Text End Sub
Word文書で適当に範囲選択をしておいて…
Image may be NSFW.
Clik here to view.
プロシージャを実行すると、以下のようにイミディエイトウィンドウに出力がされます。
Image may be NSFW.
Clik here to view.
選択範囲は段落の途中からとかめちゃめちゃであったとしても、ちゃんと最初の段落と最後の段落がきれいに出力されていますね。
まとめ
以上、Word VBAで選択範囲から最初の段落と最後の段落を取得する方法をお伝えしました。
Paragraphコレクションで集合として取得して、
- 最初の段落:インデックス番号が1
- 最後の段落:インデックス番号がコレクションの要素数
ということで取得をすることができます。
また、段落に含まれる文字列を取得する方法をお伝えしました。段落は範囲の情報を持ちませんので、いったんRangeプロパティで範囲を取得してから、Textプロパティで文字列を取得という流れでしたね。
では次回、今回学んだことを、選択範囲の前後に文字列を挿入するマクロに活かしていきたいと思います。
どうぞお楽しみに!