【入門編】【初心者向け】ExcelデータからWordの表へ一括転記する基本のループ処理 – Word VBA解析バイブル

スポンサーリンク

こんにちは! Word VBAの世界へようこそ。
マクロの記録ボタンを押すだけのステージから一歩進み、「自分でコードを書いて、日々の面倒な作業を一瞬で終わらせたい!」そう思っているあなたへ。

今回は、ExcelにあるデータをWordの表へ一括で流し込む、実務で最もよく使う「基本のループ処理」をマスターしましょう。

ここをクリアすれば、Word VBAの構造がスッと頭に入り、あなたの事務作業の自動化スキルは間違いなく一段階アップします。「難しそう…」なんて身構えなくて大丈夫。優しい先輩が、一歩ずつ丁寧にお供しますよ。

—

1. なぜ「コピペ」ではなく「ループ処理」なのか?

ExcelからWordへデータを移すとき、マウスでカチカチとコピー&ペーストを繰り返していませんか? データが3行ならまだしも、30行、100行となれば気が遠くなりますよね。

VBAのループ処理(`For~Next`)を使えば、たったコンマ数秒で、何行のデータであっても正確にWordの表へ流し込むことができます。

今回目指すゴール

  • Excel側にある「名前」「部署」「年齢」などのリストデータを読み込む。
  • Word側に用意した表の行を、データ量に合わせて自動で追加する。
  • 指定したセルの位置(Range)へ、ズレることなくデータを配置する。

—

2. 実装の全体像:コードを覗いてみよう

まずは、実際に動くコードの全体像をお見せします。
今回は分かりやすくするために、Word側のVBAエディタからExcelファイルを開き、データを読み込んでWordの表に書き込むという王道のスタイルで解説します。

Sub ImportExcelDataToTable()
Dim xlApp As Object
Dim xlWb As Object
Dim xlWs As Object
Dim lastRow As Long
Dim i As Long
Dim targetTable As Table
Dim targetRow As Row
Dim excelFilePath As String

‘ 1. 読み込むExcelファイルのパスを指定(ご自身の環境に合わせて変更してください)
excelFilePath = “C:\Test\EmployeeData.xlsx”

‘ 2. Excelを裏側で起動する(オブジェクト指向の基本ですね)
Set xlApp = CreateObject(“Excel.Application”)
xlApp.Visible = False ‘ 画面は見せない方が高速に動きます
Set xlWb = xlApp.Workbooks.Open(excelFilePath)
Set xlWs = xlWb.Sheets(1) ‘ 1番目のシートを対象にする

‘ 3. Excelデータの最終行を取得する(データの終わりを知るため)
lastRow = xlWs.Cells(xlWs.Rows.Count, “A”).End(-4162).Row ‘ -4162 は xlUp のこと

‘ 4. Word文書内にある「1番目の表」を操作対象にする
If ActiveDocument.Tables.Count = 0 Then
MsgBox “Word文書内に表が見つかりません。”, vbCritical
GoTo CleanUp
End If
Set targetTable = ActiveDocument.Tables(1)

‘ 5. 【ここがキモ】Excelの行数分だけループを回して、Wordの表に行を追加&転記する
‘ ※ 1行目は見出しと仮定し、データは2行目から最終行まで回します
For i = 2 To lastRow
‘ Wordの表に新しい行を末尾に追加する
Set targetRow = targetTable.Rows.Add

‘ 各セルのRangeオブジェクトにExcelの値を代入する
‘ (余計な改行コードが入らないように .Text でクリアに代入します)
targetRow.Cells(1).Range.Text = xlWs.Cells(i, 1).Value ‘ A列:名前
targetRow.Cells(2).Range.Text = xlWs.Cells(i, 2).Value ‘ B列:部署
targetRow.Cells(3).Range.Text = xlWs.Cells(i, 3).Value ‘ C列:年齢
Next i

MsgBox “データの流し込みが完了しました!”, vbInformation

CleanUp:
‘ 6. 開いたExcelの裏側処理をきちんと閉じてメモリ解放(プロの作法です)
On Error Resume Next
xlWb.Close False
xlApp.Quit
Set xlWs = Nothing
Set xlWb = Nothing
Set xlApp = Nothing

End Sub

—

3. 初学者が押さえるべき「3つの重要ポイント」

上記のコードの中で、特に初心者の方が「おっ?」と思うポイントを3つに絞って解説します。ここさえ分かれば、応用は自由自在です。

① Rangeオブジェクトを制する者はWord VBAを制する

Wordのセルに文字を入れるとき、`Cell(1, 1).Value = “文字”` のようには書きません。
Word VBAでは、セルの中にさらに `Range`(範囲) という目に見えないテキストボックスのような空間が存在します。

targetRow.Cells(1).Range.Text = “こんにちは”

「セルの、その中のRangeに対して、Textを入れるんだな」と呪文のように覚えておいてください。これを知らないと、「型が一致しません」というエラーの海に溺れることになります。

② `.Rows.Add` で表がダイナミックに育つ

Excelの表は最初から何行あってもプレッシャーになりませんが、Wordの表は「足りなくなったら自分で増やす」必要があります。
ここで活躍するのが `.Rows.Add` メソッドです。

Set targetRow = targetTable.Rows.Add

この1行を実行するだけで、Wordの表の最後に、ピカピカの新しい1行がスポッと追加されます。ループと組み合わせることで、Excelのデータ量に合わせてWordの表が自動的に育っていくわけですね。

③ 処理が終わったら「お片付け(メモリ解放)」をする

Excelの仕組みを裏側で借りて動かすとき(これをオートメーションと呼びます)、VBAの裏ではExcelが立ちっぱなしになっています。
コードの最後にある、これらのお片付けブロック。

xlWb.Close False
xlApp.Quit
Set xlApp = Nothing

「使ったものは元の状態に戻して閉じる」。これができるエンジニアは、動作が軽快でバグらない美しいコードを書くことができます。プロっぽいこだわりを、ぜひ最初から真似してみましょう。

—

4. 陥りやすいエラーと対策

初心者の頃によくやってしまう「あるある」と、その回避策をご紹介します。

  • エラー:「インデックスが有効範囲にありません」
  • 原因: `ActiveDocument.Tables(1)` と書いたけれど、Word文書の中にまだ表を1つも作っていない場合におこります。
  • 対策: 必ずWord文書にあらかじめ「見出し行だけの空の表」を1つ作っておいてからマクロを実行しましょう。
  • セルに謎の変な記号(改行マークなど)が入る
  • 原因: Excelのセルの末尾に不要な改行やスペースが含まれていることがあります。
  • 対策: `Trim()` 関数を使って、`targetRow.Cells(1).Range.Text = Trim(xlWs.Cells(i, 1).Value)` のように余計な空白を削ってあげると完璧です。

—

まとめ

お疲れ様でした! 今回は「ExcelデータからWordの表へ一括転記する基本のループ処理」を解説しました。

1. Excelを裏側で起動してデータを読み込む。
2. `For~Next` でデータ数だけループを回す。
3. `.Rows.Add` でWordの表に行を継ぎ足していく。
4. `Range.Text` で確実に文字を流し込む。

この流れは、今後あなたがどんな複雑なWord自動化に挑戦する時でもベースとなる、極めて強力な基本パターンです。

ここをクリアしたあなたなら、もう「マクロの記録」だけの初心者ではありません立派なVBAエンジニアの第一歩を踏み出していますよ。ぜひご自身の環境でも試してみてくださいね。次回の応用編もお楽しみに!

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