WordのVBA(マクロ)を使って、文書内にある表(テーブル)のセル情報をイテレーション(For Eachステートメント)で効率的に取得する方法について解説します。
Excel VBAではRangeオブジェクトを使った走査がよく使われますが、Word VBAでテーブル構造を細かく走査するには、TableオブジェクトのRange.Cellsや、特定の行・列に対するCellsコレクションを組み合わせるのがポイントになります。
前提条件
- 動作確認環境: Microsoft Word (Office 365 / Word 2019以降)
- 対象文書内に少なくとも1つの表(テーブル)が存在していること
1. テーブル全体のすべてのセル情報を取得する
次のサンプルコードは、アクティブドキュメント(またはコードを記述している文書モジュール)の最初のテーブルにあるすべてのセルを順番に走査し、イミディエイトウィンドウにテキストを出力します。
Sub テーブル情報の取得_全体()
Dim t As Table
Dim c As Cell
' 文書内の1番目のテーブルを指定
Set t = ActiveDocument.Tables(1)
' テーブル内の全セルをイテレーションで走査
For Each c In t.Range.Cells
' セル内のテキストを出力(末尾のセル終了マーク含む)
Debug.Print Replace(c.Range.Text, vbCr & Chr(7), "")
Next c
End Sub
2. 列単位でセル情報を取得する
特定の列に絞って情報を取得したい場合は、Columns(インデックス).Cellsを使います。次の例では、2列目のすべてのセルの情報を取得します。
Sub テーブル情報の取得_列単位()
Dim t As Table
Dim c As Cell
Set t = ActiveDocument.Tables(1)
' 2列目のセルのみを走査
For Each c In t.Columns(2).Cells
Debug.Print Replace(c.Range.Text, vbCr & Chr(7), "")
Next c
End Sub
3. 行単位でセル情報を取得する
特定の行に絞って情報を取得したい場合は、Rows(インデックス).Cellsを使います。次の例では、3行目のすべてのセルの情報を取得します。
Sub テーブル情報の取得_行単位()
Dim t As Table
Dim c As Cell
Set t = ActiveDocument.Tables(1)
' 3行目のセルのみを走査
For Each c In t.Rows(3).Cells
Debug.Print Replace(c.Range.Text, vbCr & Chr(7), "")
Next c
End Sub
注意点・補足
- Wordのテーブルセルに含まれるテキストには、セル終了マーク(
vbCr & Chr(7))が含まれています。そのままDebug.Printすると意図しない改行が入るため、実務では上記のコード例のようにReplace関数などで取り除くと扱いやすくなります。 Me.Tables(1)は標準モジュールではなくシートや文書などのオブジェクトモジュール内で記述する場合に有効ですが、一般的にはActiveDocument.Tables(1)や明示的なドキュメントオブジェクトを指定する方が確実です。
参考情報
Microsoft Learn: Table オブジェクト (Word)
この記事の更新履歴
この記事は、生成AIを活用した自動レビュー・更新フローにより内容を見直し、必要な修正を反映しています。
2026年9月12日
- 変更リンク切れとなっていた古いサポート情報をMicrosoft Learnの公式ドキュメントへ置換しました。
- 変更ブロッククォートや特殊なHTMLタグで崩れていたコード表現を、シンタックスハイライト対応のプレーンなコードブロック形式へ修正しました。
- 追加テーブルの行単位と列単位の処理における変数定義や説明の誤りを訂正し、期待される出力結果の解説を追加しました。
