![見出し画像](https://assets.st-note.com/production/uploads/images/158404459/rectangle_large_type_2_c3ab7d928468457877e08c443dceb1f3.png?width=1200)
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オブジェクトを取得できます。
![](https://assets.st-note.com/img/1729142274-xphnkJ8qGdVDTame0uRCA7If.png?width=1200)
▲ オブジェクトブラウザーの詳細ペイン1行目に「Property Paragraphs As Paragraphs」と表示されていることから、Paragraphsプロパティの戻り値がParagraphs型のオブジェクトであることがわかります。
Paragraphsオブジェクトはコレクションですから、本書で学習してきたDocumentsやCharacters・Words・Sentences、あるいはExcel VBAのWorkbooks・Sheets・Rangeと同様に、含まれる要素の個数を取得するCountプロパティ(図6-1b)があります。
![](https://assets.st-note.com/img/1729142361-3gvsMBA2OH8xzJFl4a5PICq0.png?width=1200)
▲ オブジェクトブラウザーの詳細ペイン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)があります。
![](https://assets.st-note.com/img/1729142377-J0iM8GKuRLbIFaTCsNSPHXkn.png?width=1200)
▲ オブジェクトブラウザーの詳細ペイン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
似たコードですが違いがあります。
ここから先は
¥ 280
よろしければ、サポートをお願いします!!