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のスタイル定義そのものを動的に更新する」というさらに深い領域へ足を踏み入れてみましょう。
あなたの自動化ライフが、より洗練されたものになりますように。応援しています!
