見出し画像

Excel VBAユーザーのためのWord VBA 入門 「chapter 6. Paragraphは段落を表す」

chapter 5で学習した段落書式を表すParagraphFormatオブジェクトとは別に、段落を表すParagraphsコレクションとParagraphオブジェクトも、Word VBAには存在します。
chapter 6では、段落を表すParagraphsコレクションとParagraphオブジェクトを見ていきましょう。
chapter 3で、段落を表すParagraphオブジェクトはRangeの上位オブジェクトではないことをお伝えしましたが、ParagraphからRangeを取得することもできます。



この記事は『Excel VBAユーザーのためのWord VBA入門』の、chapter 6 です。「はじめに」から「chapter 5. ParagraphFormatは段落書式を表す」までをお読みいただいていることを想定して記述しております。



6-1. Paragraphsを取得する

Paragraphオブジェクトを要素として含む、Paragraphsコレクションの取得から見ていきましょう。

Document.ParagraphsプロパティでParagraphsを取得する

DocumentオブジェクトのParagraphsプロパティ(図6-1a)を使うと、Word文書の全段落を表すParagraphsオブジェクトを取得できます。

図6-1a

▲ オブジェクトブラウザーの詳細ペイン1行目に「Property Paragraphs As Paragraphs」と表示されていることから、Paragraphsプロパティの戻り値がParagraphs型のオブジェクトであることがわかります。

Paragraphsオブジェクトはコレクションですから、本書で学習してきたDocumentsやCharacters・Words・Sentences、あるいはExcel VBAのWorkbooks・Sheets・Rangeと同様に、含まれる要素の個数を取得するCountプロパティ(図6-1b)があります。

図6-1b

▲ オブジェクトブラウザーの詳細ペイン1行目に「Property Count As Long」と表示されていることから、他のコレクションのCountプロパティと同様に戻り値はLong型のデータであることがわかります。

以下のコードを実行すると、アクティブ文書に含まれる段落の個数がメッセージボックスに表示されます。

MsgBox ActiveDocument.Paragraphs.Count


6-2. ParagraphsからParagraphを取得する

Paragraphsコレクションから、要素であるParagraphオブジェクトを取得するコードを確認しましょう。

Paragraphを1つ取得する

次のコードを実行すると、アクティブ文書の1つ目の段落が選択され、その文字列がメッセージボックスに表示されます。

With ActiveDocument.Paragraphs.Item(1)
    .Range.Select
    MsgBox .Range.Text
End With

上記のコードで使用している「.Range.Select」「.Range.Text」については、「6-3. ParagraphにSelectメソッドやTextプロパティはない」で解説します。

Paragraphsオブジェクトは、これまで本書で学習してきたDocuments・Characters・Words・Sentencesと同様にコレクションですから、要素オブジェクトを取得するためのItemメソッド(図6-2a)があります。

図6-2a

▲ オブジェクトブラウザーの詳細ペイン1行目に、「Function Item」「As Paragraph」と表示されていることから、戻り値がParagraph型オブジェクトのメソッドであることがわかります。 「(Index As Long)」表示から、引数IndexにはLong型のデータを指定しなければならないことがわかります。詳細ペイン2行目の「Word.Paragraphsの既定メンバー」表示や、メンバーペインのアイコンから、Paragraphsコレクションの既定メンバーであることもわかります。

ItemメソッドはParagraphsコレクションの既定メンバーですから、先ほどのコード、

With ActiveDocument.Paragraphs.Item(1)

は、「.Item」を省略して以下のように書くこともできます。

With ActiveDocument.Paragraphs(1)


Paragraphを順番に取得する

Paragraphsオブジェクトはコレクションですから、For Each~Nextループで要素オブジェクトを順番に取得できます。
以下のSubプロシージャを実行すると、アクティブ文書の段落が順番に選択され、その文字列がメッセージボックスに表示されます。

Sub Paragraphを順番に取得する()
    Dim par As Paragraph
    For Each par in ActiveDocument.Paragraphs
        par.Range.Select
        MsgBox par.Range.Text
    Next
End Sub

このSubプロシージャは、chapter 3で学習したCharacters・Words・Sentencesに対するFor Each~Nextループに似ていますが、大きな違いがあります。その違いについて、次の「6-3. ParagraphにSelectメソッドやTextプロパティはない」で解説します。


6-3. ParagraphにSelectメソッドやTextプロパティはない

Paragraphs とCharacters・Words・Sentencesの違い

chapter 3で学習したCharacters・Words・Sentences経由でRangeを取得するFor Each~Next文は、いずれも以下のような形になっていました。

Dim rng As Range
For Each rng in ActiveDocument.Sentences
    rng.Select
    MsgBox rng.Text
Next

それに対し「6-2. ParagraphsからParagraphを取得する」で実行したFor Each~Next文は以下のとおりです。

Dim par As Paragraph
For Each par in ActiveDocument.Paragraphs
    MsgBox par.Range.Text
Next

似たコードですが違いがあります。

ここから先は

7,334字 / 12画像

¥ 280

よろしければ、サポートをお願いします!!