Word VBAを「APIの言語」で操る。段落書式をJSON化して世界を繋ぐ極限の技術
こんにちは。自動化の現場で血肉を削ってきた皆さんに、今日は少しだけ「一段上の景色」をお見せしましょう。
多くの人がWord VBAを「マクロの記録」で終わらせてしまいます。しかし、真のエンジニアにとって、Wordのドキュメントは単なる文書ではなく、「構造化されたデータの塊」です。
今日は、Wordの段落(Paragraph)の書式をJSON形式でシリアライズ(抽出・変換)し、外部システムやWeb APIと連携するための「データ変換エンジン」の設計思想を伝授します。
—
なぜ「Wordの書式」をJSONにするのか?
Wordの書式設定は、内部的に巨大で複雑なオブジェクトツリーを持っています。これをそのまま外部のWebシステムに持っていこうとしても、XMLやHTMLの断片では限界があります。
JSON化する最大のメリットは「再現性の分離」です。
- Wordに依存しない設定値(フォントサイズ、行間、インデントなど)を保持できる。
- 外部システム(ReactやVueなどのWebアプリ)で、同じ書式設定をプレビューできる。
- チーム間での「デザイン規定」をJSONファイルで管理し、Wordで即座に適用(デシリアライズ)できる。
これができれば、あなたは「Word職人」から「ドキュメントエンジニア」へと進化します。
—
1. 概念図:WordからJSONへの変換パイプライン
[Word Paragraph Object]
↓
[VBA Property Mapper] (ここが核心!)
↓
[JSON String]
↓
[External System / API]
このパイプラインを構築するには、Wordの `Paragraph.Format` オブジェクトを泥臭く読み解く必要があります。
—
2. 実装:段落書式をJSONへ抽出するエンジン
まずは、現在の段落の書式をJSON文字列に変換するVBAコードです。`ScriptControl`を使う方法もありますが、今回は汎用性を重視してシンプルな文字列構築を行います。
‘ 【重要】参照設定不要。軽量・高速なJSON生成器
Public Function ParagraphToJson(para As Paragraph) As String
Dim fmt As ParagraphFormat
Set fmt = para.Format
Dim json As String
json = “{”
json = json & “””lineSpacing””: ” & fmt.LineSpacing & “,”
json = json & “””leftIndent””: ” & fmt.LeftIndent & “,”
json = json & “””alignment””: ” & fmt.Alignment & “,”
json = json & “””spaceBefore””: ” & fmt.SpaceBefore
json = json & “}”
ParagraphToJson = json
End Function
‘ 実行用プロシージャ
Sub ExportParagraphFormat()
Dim currentPara As Paragraph
Set currentPara = Selection.Paragraphs(1)
Debug.Print ParagraphToJson(currentPara)
MsgBox “JSONデータをイミディエイトウィンドウに出力しました。”
End Sub
コードの解説
- `Paragraph.Format` オブジェクト: ここには段落の全ての「呼吸」が詰まっています。`SpaceBefore`(前後の間隔)や `LineSpacing` は、Wordの内部単位(ポイント)で返されます。
- なぜシンプルに書くのか: VBAで複雑なJSONライブラリを入れると、配布先でライブラリのパスエラーが多発します。本番環境では、外部依存を極限まで減らすのが「伝説のエンジニア」の流儀です。
—
3. 陥りやすい罠:ここをクリアすれば一人前!
初心者が必ずハマるポイントを伝授します。
① 「単位」の幻想
WordのVBAが返す数値は、基本的に「ポイント(pt)」です。しかし、UI上の設定では「mm」や「cm」で見えるため、外部システムと連携する際は「ポイントからミリメートルへの換算係数(1pt ≒ 0.3527mm)」を定数として持っておく必要があります。
② プロパティの「未定義」値
`fmt.LineSpacing` が `wdUndefined` を返すことがあります。これは「選択範囲内に複数の書式が混在している」ことを意味します。ここをスルーするとJSONが壊れるため、必ず `If` 文でチェックする癖をつけましょう。
—
4. 次のステップ:JSONを「適用」する
抽出(シリアライズ)ができれば、次は「適用(デシリアライズ)」です。JSONをパースして `Paragraph.Format` に値を代入すれば、外部で作ったデザインをWordに即座に反映できます。
‘ 擬似コード:JSONから書式を適用するイメージ
Sub ApplyFormatFromJson(para As Paragraph, json As String)
‘ 実際にはここでJSONパース処理を行う(正規表現や簡易分割)
‘ para.Format.LeftIndent = parsedValue(“leftIndent”)
‘ para.Format.Alignment = parsedValue(“alignment”)
‘ プロパティへの代入は、適用後に必ず画面を更新する意識を
para.Format.SpaceBefore = 12
End Sub
—
まとめ:あなたはもう「マクロの記録」に頼らない
Word VBAを単なる「自動入力ツール」として使うのはもう卒業です。
データをJSONという共通言語に変換し、WordとWebの世界を橋渡しする。この技術を身につければ、あなたの作るドキュメントシステムは、企業の基幹システムの一部として機能するようになります。
まずは今回のコードをコピペして、自分のWordでJSONが吐き出される快感を確認してください。そこから先は、あなたの創造力次第です。
「ここをクリアすれば、Word VBAの基本はバッチリですよ」。
また何かあれば、いつでも聞きに来てくださいね。応援しています。
