【入門編】【上級者向け】Wordの「段落」に適用された「直接書式」をすべてスタイルに変換するリファクタリングツール – Word VBA解析バイブル

スポンサーリンク

Word VBAの真髄:地獄のような「直接書式」を「スタイル」で浄化するリファクタリング術

こんにちは。ドキュメントという名の「混沌」を、コードの力で「秩序」へと変える。そんな自動化の旅路へようこそ。

Wordを使っていると、誰かが手動でフォントサイズを変え、色を付け、インデントをいじり倒した「魔境」のようなドキュメントに出会うことがありますよね。これらを一つずつ手作業で直すのは、まさに徒労。

今回は、「直接書式(Direct Formatting)」を解析し、適切な「スタイル」へと昇華させるリファクタリングツールを構築します。これをマスターすれば、あなたはWord文書の支配者になれます。

1. なぜ「直接書式」が諸悪の根源なのか

Wordには大きく分けて2つの書式適用方法があります。

  • 直接書式: ツールバーで「太字にする」「フォントサイズを12ptにする」といった一時的な装飾。
  • スタイル: 「見出し1」「本文」といった、文書構造と結びついた論理的な定義。

直接書式がなぜ危険か? それは「文書の構造(意味)」と「見た目」が密結合してしまい、後から修正が不可能になるからです。今回のアプローチは、「直接書式の特徴(フォントサイズや太字など)を抽出して、対応するスタイルを適用する」という、いわばドキュメントの再構築です。

2. 実践:直接書式を浄化するリファクタリング・スクリプト

それでは、プロの現場で使える堅牢なコードを書きましょう。このスクリプトは、特定のフォント設定を持つ段落を検出し、自動的に「見出し」スタイルへと変換します。

Option Explicit

‘ ———————————————————
‘ 目的: 段落の「直接書式」を解析し、スタイルへ変換する
‘ ———————————————————
Sub RefactorParagraphStyles()
Dim para As Paragraph
Dim rng As Range

‘ 処理の高速化:画面描画を停止してリソースを節約
Application.ScreenUpdating = False

For Each para In ActiveDocument.Paragraphs
Set rng = para.Range

‘ — ここに「判定ロジック」を記述 —
‘ 例:フォントサイズが16pt、かつ太字なら「見出し1」にする
If rng.Font.Size = 16 And rng.Font.Bold = wdToggle Then
rng.Style = ActiveDocument.Styles(wdStyleHeading1)

‘ 直接書式をクリアして、スタイルに完全に依存させる
‘ これが「浄化」の仕上げです
rng.Font.Reset
End If
Next para

Application.ScreenUpdating = True
MsgBox “リファクタリング完了!文書がクリーンになりました。”
End Sub

コードの重要ポイント解説

  • `Application.ScreenUpdating = False`: これを忘れると、Wordはループのたびに画面を再描画し、動作が極端に遅くなります。プロのコードでは必須の作法です。
  • `rng.Font.Reset`: これが伝説のテクニックです。スタイルを適用しただけでは、直接書式が「上書き」として残る場合があります。`Reset`を呼ぶことで、スタイル定義以外の余計な装飾をすべて剥ぎ取ります。

3. 陥りやすい罠:オブジェクトのライフサイクル

初学者がよくやるミスは、`Selection`オブジェクトを使い回すことです。

‘ 悪い例:Selectionを使うとカーソルが動き、処理が遅くなる
Selection.MoveDown
‘ …

Selectionは「ユーザーの視点」です。 自動化を行う際は、必ず`Range`オブジェクトを使ってください。`Range`は文書の裏側のデータ構造を直接操作するため、高速かつ安全に処理を行えます。

4. 次のステップ:さらなる高みへ

このツールを応用すれば、以下のような発展が可能です。

1. 辞書オブジェクトの活用: フォントサイズとスタイルの対応表(Map)を別途作成し、ループ内で動的にマッチングさせる。
2. 正規表現との組み合わせ: 特定の文字列パターン(例:「第X章」)が含まれる段落のみをスタイル変換する。
3. ログ出力: どの段落がどのスタイルに変更されたかをイミディエイトウィンドウに記録する。

最後に:自動化は「愛」である

手作業を減らすことは、単なる効率化ではありません。人間が本来のクリエイティブな思考に集中できるようにするための「愛」です。

今日からあなたのWordマクロは、単なる「記録」から「設計」へと進化しました。まずはこのコードをコピーして、手元の汚れた文書をクリーンにしてみてください。

もし分からないことがあれば、いつでも聞いてください。ここをクリアすれば、あなたはもう立派なWord VBAエンジニアです。応援していますよ!

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