【入門編】【上級者向け】Wordの「段落」の書式設定をJSONファイルから読み込み、動的に適用する汎用エンジン – Word VBA解析バイブル

スポンサーリンク

Word VBAを「脱・マクロ記録」へ:JSON駆動型・動的書式設定エンジンの構築

こんにちは。業務自動化の深淵へようこそ。

多くの人がWord VBAを触る際、最初にぶつかる壁が「書式変更のハードコード」です。「この見出しはフォントサイズ14、太字、青色…」とコードに直接書き込むと、デザインが少し変わるたびにマクロを修正しなければなりません。これはエンジニアとして最も避けたい「保守性の死」です。

今日は、「設定をJSONに追い出し、VBA側は汎用的なエンジンに徹する」という、プロフェッショナルな設計手法を伝授します。

なぜ「JSON駆動」なのか?

Wordの`Paragraph`オブジェクトや`Font`オブジェクトを個別に叩くのは骨が折れる作業です。設定をJSONという「外部の地図」にすることで、以下のメリットが生まれます。

1. 分離の原則: 書式ルール(デザイン)と処理ロジック(コード)が完全に分離される。
2. 即時反映: コードを一文字も変えず、JSONファイルを書き換えるだけでWordの出力結果が変わる。
3. 可読性: プログラミング知識が浅い人でも、JSONなら設定を変更できる。

ステップ1:JSONの定義(設計図)

まずは、設定ファイルを定義します。これを `styles.json` として保存しましょう。

{
“Heading1”: {
“Size”: 16,
“Bold”: true,
“Color”: “FF0000”,
“SpaceAfter”: 12
},
“BodyText”: {
“Size”: 10.5,
“Bold”: false,
“Color”: “000000”,
“SpaceAfter”: 6
}
}

ステップ2:VBAでJSONを解析する

VBAには標準でJSONパーサーがありません。ここでは、世界中のVBAエンジニアが愛用する軽量ライブラリ「[VBA-JSON](https://github.com/VBA-tools/VBA-JSON)」を前提とします。

核心となるエンジンコード

このコードは、指定した段落に対し、JSONから読み込んだ値を動的に適用する汎用関数です。

‘ 必要な参照設定: Microsoft Scripting Runtime
‘ 必須ライブラリ: VBA-JSON

Sub ApplyStyleFromJson(targetPara As Paragraph, styleConfig As Object)
‘ 速度向上のための最適化
On Error Resume Next

With targetPara.Range.Font
.Size = styleConfig(“Size”)
.Bold = styleConfig(“Bold”)
‘ 16進数カラーコードをRGBに変換して適用
.Color = CLng(“&H” & Right(styleConfig(“Color”), 2) & Mid(styleConfig(“Color”), 3, 2) & Left(styleConfig(“Color”), 2))
End With

With targetPara.Format
.SpaceAfter = styleConfig(“SpaceAfter”)
End With

On Error GoTo 0
End Sub

ステップ3:メイン処理(エンジンを回す)

ここが「マクロの記録」から脱却する瞬間です。JSONファイルを読み込み、ループで各段落に適用します。

Sub MainEngine()
Dim fso As Object
Dim jsonText As String
Dim styles As Object
Dim para As Paragraph

‘ JSONファイルの読み込み
Set fso = CreateObject(“Scripting.FileSystemObject”)
jsonText = fso.OpenTextFile(“C:\config\styles.json”, 1).ReadAll
Set styles = JsonConverter.ParseJson(jsonText)

‘ ドキュメント内の全段落を走査
For Each para In ActiveDocument.Paragraphs
‘ 段落の先頭文字を見て適用するスタイルを決定する例
If InStr(para.Range.Text, “【見出し】”) > 0 Then
ApplyStyleFromJson para, styles(“Heading1”)
Else
ApplyStyleFromJson para, styles(“BodyText”)
End If
Next

MsgBox “書式設定が完了しました。”
End Sub

陥りやすい罠とプロの知見

1. オブジェクトのライフサイクル: `ActiveDocument.Paragraphs`をループする際、段落を削除したり追加したりするとインデックスがずれます。ループ内で構造を大きく変える場合は、後ろから前に向かってループ(`For i = .Count To 1 Step -1`)させるのが鉄則です。
2. エラーハンドリング: `styleConfig(“Size”)` がJSONに存在しない場合、VBAは即座に停止します。本番環境では `If styleConfig.Exists(“Size”) Then` を挟むのが、一流のエンジニアの流儀です。
3. パフォーマンス: `ScreenUpdating = False` を忘れがちですが、Word VBAにおいてこれは「魔法の杖」です。処理の冒頭でオフにし、最後にオンに戻すだけで、実行速度は劇的に変わります。

まとめ:ここをクリアすれば、あなたはもう初心者ではありません

この「JSON駆動」という発想は、単なるWord自動化を超えて、あらゆるシステム設計に通じる考え方です。
「コードの中に情報を埋め込まない」。このシンプルかつ強力な哲学を手に入れたあなたは、もうマクロの記録に依存することなく、自由自在にWordを操れるはずです。

もし分からないことがあれば、またいつでも聞いてください。次は、「JSONに設定した条件で、Wordのスタイル定義そのものを動的に更新する」というさらに深い領域へ足を踏み入れてみましょう。

あなたの自動化ライフが、より洗練されたものになりますように。応援しています!

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