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