Word VBAを「ただの文書作成ツール」で終わらせるな。表データをJSON化し、世界と繋ぐ極限の自動化術
こんにちは。Word VBAの深淵を覗き込もうとしている皆さん。
「Wordで表を作る」……多くの人はここで思考を止めます。しかし、プロフェッショナルな視点で見れば、Wordの表(Table)は、極めて強力な「構造化データの器」に他なりません。
今回は、Wordにある表データを抽出し、現代のシステム連携の共通言語である「JSON」へと昇華させ、外部APIへ送信するまでの技術体系を伝授します。マクロの記録という「箱庭」から脱却し、真の自動化エンジニアへの第一歩を踏み出しましょう。
—
1. なぜWordの「表」をJSON化するのか?
業務において、見積書、仕様書、進捗管理表などはWordで管理されることが多いはずです。しかし、そのデータが「ただの印刷物」として消えていくのはあまりにも勿体ない。
JSON(JavaScript Object Notation)化することで、Wordのデータを:
- Webシステム(Salesforceやkintone等)へ自動登録する
- BIツールで可視化して経営判断に活かす
- 別のデータベースと同期させる
これらが可能になります。Wordが「単なる文書作成ソフト」から「データの入口」へと変貌する瞬間です。
—
2. 実装の設計図:3つのステップ
今回のタスクは以下の手順で完結させます。
1. データの抽出: 表の各セルを走査し、配列へ格納する。
2. シリアライズ: 配列をJSON形式の文字列に変換する。
3. 転送: `MSXML2.XMLHTTP` を使い、APIエンドポイントへPOST送信する。
—
3. 実践コード:Wordから世界へ繋ぐエンジニアリング
以下のコードは、Wordの最初の表(Table(1))を読み込み、APIに送信する例です。
‘ 必要な参照設定: Microsoft XML, v6.0
Sub ExportTableToJsonAndPost()
Dim tbl As Table
Dim json As String
Dim i As Long, j As Long
Dim rowData As String
‘ 1. 表の取得(アクティブな文書の最初の表)
Set tbl = ActiveDocument.Tables(1)
‘ 2. JSON配列の構築(簡易的な手動組み立て)
json = “[”
For i = 2 To tbl.Rows.Count ‘ 1行目はヘッダーと仮定
rowData = “{”
rowData = rowData & “””item””: “”” & CleanText(tbl.Cell(i, 1).Range.Text) & “””,”
rowData = rowData & “””value””: ” & CleanText(tbl.Cell(i, 2).Range.Text)
rowData = rowData & “}”
json = json & rowData & IIf(i < tbl.Rows.Count, ",", "") Next i json = json & "]" ' 3. HTTP POST送信 Call PostToApi("https://api.example.com/data", json) End Sub ' 不要な改行コードや終端記号を除去するヘルパー関数 Function CleanText(txt As String) As String CleanText = Replace(Replace(txt, vbCr, ""), vbCell, "") End Function ' API連携の実体 Sub PostToApi(url As String, payload As String) Dim http As Object Set http = CreateObject("MSXML2.XMLHTTP") With http .Open "POST", url, False .SetRequestHeader "Content-Type", "application/json" .Send payload If .Status = 200 Then MsgBox "送信成功!" Else MsgBox "エラー発生: " & .StatusText End If End With End Sub ---
4. 現場で陥りやすい「罠」とその対策
① セル内の「見えない文字列」
Wordのセルには、必ず `vbCr`(段落記号)と `vbCell`(セル終端記号)が含まれています。これらを無視してAPIに投げると、JSONのパースエラーが起きます。必ず上記の `CleanText` 関数のようなクリーニング処理を挟んでください。
② セルの結合(Merged Cells)の呪い
結合されたセルを `tbl.Cell(i, j)` で読み込むと、Word VBAは例外(エラー)を投げます。
- 対策: `tbl.Cell(i, j).Information(wdWithInTable)` を使用して、そのセルが存在するかを確認する防衛的なコードを書くのが上級者の嗜みです。
③ 文字コードと特殊文字
API連携では、日本語を含む場合はUTF-8でのエンコードが必須です。VBA単体での複雑なエンコードは難易度が高いため、まずは「半角英数字のみ」でテストし、徐々に範囲を広げるのが挫折しないコツです。
—
最後に:自動化の先にある景色
Word VBAで表を操作し、APIに繋ぐ。この一連の作業ができるようになると、あなたの手元にあるWordファイルはすべて「生きたデータベース」になります。
「マクロの記録」ボタンを押すだけの日常はもう終わりです。コードを書き、データを流し、システムを連携させる。その手応えこそが、伝説の自動化エンジニアへの第一歩です。
まずは、目の前のWordファイルにある表を一つ、JSONに変換するところから始めてみてください。何か詰まったら、いつでも戻ってきてくださいね。あなたの挑戦を応援しています。
