【入門編】【中級者向け】段落の「アウトラインレベル」を解析して、見出し構成をCSV出力する – Word VBA解析バイブル

スポンサーリンク

Word VBAの真髄:段落の「構造」をデータとして掌握せよ

こんにちは。現場の最前線で自動化のアーキテクチャを設計しているエンジニアです。

Word VBAを使いこなす第一歩は、「文章をただの文字の羅列」として見るのをやめ、「階層構造を持つオブジェクトの集合体」として捉えることから始まります。

今日は、多くの人が「マクロの記録」で挫折する壁を突破し、「文書のアウトラインレベルを解析してCSV化する」という実践的なプログラムを通して、Word VBAの核心を伝授します。

なぜ「アウトラインレベル」に注目するのか?

Word文書において、段落(Paragraph)には「アウトラインレベル」という属性が存在します。これは「見出し1」や「見出し2」といったスタイルと連動しており、文書の骨組みを決定づけるメタデータです。

これをプログラムで抽出できるようになれば、長大なドキュメントの目次を自作したり、特定の章だけを別のファイルに切り出したりといった「文書管理のハブ」となるツールが作れるようになります。

今回のミッション:構造解析エンジンを構築する

以下のコードは、文書内の全段落を走査し、レベル情報とテキストをCSV形式でイミディエイトウィンドウに出力(またはファイル保存)するものです。

Sub ExportDocumentStructure()
‘ WordのDocumentオブジェクトを明示的に扱う
Dim doc As Document
Dim para As Paragraph
Dim output As String

Set doc = ActiveDocument

‘ ヘッダーの定義
Debug.Print “Level,Text”

‘ 段落オブジェクトを一つずつ走査(全走査の基本)
For Each para In doc.Paragraphs
‘ アウトラインレベルが「本文(Body Text)」以外かを確認
‘ wdOutlineLevelBodyText は 10 です
If para.OutlineLevel <> wdOutlineLevelBodyText Then

‘ 段落の文字列から末尾の改行コード(Chr(13))を取り除くのがコツ
Dim paraText As String
paraText = Replace(para.Range.Text, vbCr, “”)

‘ CSV形式で出力(カンマ区切り)
Debug.Print para.OutlineLevel & “,””” & paraText & “”””
End If
Next para

MsgBox “構造解析が完了しました!イミディエイトウィンドウを確認してください。”, vbInformation
End Sub

コード解説:ここが「プロの書き方」のポイント

1. `For Each` によるオブジェクト走査

`For i = 1 to doc.Paragraphs.Count` と書くよりも、`For Each` を使うほうが直感的で、かつメモリ管理上もスマートです。Word VBAにおいて「コレクション」をループさせる際は、この書き方が「作法」です。

2. `para.Range.Text` の罠を回避する

Wordの段落オブジェクトに含まれるテキストには、必ず「段落記号(`vbCr`)」が含まれています。これをそのままCSVに流し込むと、ファイルが一行ずつズレる原因になります。`Replace` 関数で除去する一手間が、ツールを「壊れないもの」に変えます。

3. `wdOutlineLevelBodyText` の活用

Word VBAには、定数(名前付きの数値)が豊富に用意されています。`10` という数字を直接書くのではなく、`wdOutlineLevelBodyText` と書くことで、コードの可読性は劇的に向上します。

初学者が陥りやすい「落とし穴」

1. 「マクロの記録」に頼りすぎる
マクロの記録は `Selection.MoveDown` のような「カーソル移動」を多用しますが、これは処理速度が極めて遅く、画面がチラつく原因になります。今回紹介したように `Document.Paragraphs` を直接叩くのが、プロの自動化への入り口です。

2. オブジェクトの解放を忘れる
小規模なマクロでは気になりませんが、大規模な文書を扱う際は `Set doc = Nothing` と記述して明示的にメモリを解放する習慣をつけましょう。

次のステップへ

このコードが理解できれば、次は「CSVに出力するだけでなく、ファイルシステムに書き出す」というステップへ進めます。`Open … For Output As #1` を使えば、Excelで即座に開けるCSVファイルを生成することも可能です。

Word VBAは、単なる事務作業の効率化ツールではありません。文書という「非構造化データ」を「構造化データ」へと変換する強力な武器です。

まずはこのコードをVBE(Visual Basic Editor)に貼り付けて、自分の文書を解析してみてください。自分の書いたドキュメントの「骨組み」が数字で見えたとき、Wordの見え方が少し変わるはずです。

ここをクリアすれば、あなたはもう「記録されたマクロを動かす人」ではなく、「Wordの構造を操るエンジニア」の仲間入りです。応援しています!

タイトルとURLをコピーしました