リスト段落を扱うための便利なListParagraphsオブジェクトを紹介します。リスト段落とは、行頭に自動で記号や数字が付く箇条書きや段落番号の段落を指します。
ListParagraphsオブジェクトは、箇条書きや段落番号が設定された段落(Paragraphオブジェクト)のコレクションです。検索などの一般操作にはリスト段落のみを特定する手段はないので、マクロならではの便利さが活かせます。
文書内の段落番号をテキストに置き換えるマクロ
文書内のリスト段落の行頭番号をテキストに置き換えます。段落番号またはアウトラインによる連番を対象にし、その他の箇条書きなどの行頭文字は変更しません。
Sub リスト段落の行頭をテキスト化()
Dim oPara As Paragraph
For Each oPara In ActiveDocument.ListParagraphs
With oPara.Range.ListFormat
Select Case .ListType
' 段落番号またはアウトライン
Case wdListSimpleNumbering, wdListOutlineNumbering
.ConvertNumbersToText
End Select
End With
Next oPara
End Sub
解説
ListParagraphs と For Each Next 文 でできること
ActiveDocument.ListParagraphsで、文書内のすべてのリスト段落のコレクションを取得できます。
For Each ~ Next 文を合わせると、文書の末尾から上に向かって処理されるのがうれしい特長です。これにより、テキスト化しても連番が連番のまま保たれます。先頭から下へ処理すると、処理ごとに次段落が1に変わっていくため、結果的にすべての番号が1になってしまうところです。
ListType プロパティで種別判定
Range.ListFormat.ListType で、テキスト化する対象を選別しています。
WdListType列挙
wdListNoNumbering… 箇条書き、段落番号、アウトラインなしwdListListNumOnly… ListNumフィールドwdListBullet… 箇条書きwdListSimpleNumbering… 段落番号wdListOutlineNumbering… アウトラインwdListMixedNumbering… 複合した数字wdListPictureBullet… 箇条書き(行頭画像)
ConvertNumbersToText メソッドでテキスト変換
ConvertNumbersToTextは、自動付与された行頭文字・番号をテキストに置き換えます。
行頭がテキスト化された段落は、段落スタイルが変わらなくても ListParagraphsコレクションから外れます。
選択範囲の行頭文字・番号を一気にテキスト化
選択範囲に含まれる行頭文字・番号を一括でテキスト化するなら、一行マクロで可能です。Ctrl+A キーで全選択してから実行すれば、文書全体を対象にできます。
Selection.Range.ListFormat.ConvertNumbersToTextListオブジェクトとListParagraphsで同類のリスト段落を特定
ListParagraphsは文書の内容からだけでなく、リストの種類からも取得できます。同種のアウトラインが設定された段落のコレクションを取得し、同レベルのものを選別するといったことが可能です。
選択段落と同じリスト定義が適用された段落のコレクションSelection.Range.ListFormat.List.ListParagraphs
選択段落のリストレベルSelection.Range.ListFormat.ListLevelNumber