VBA を使用して複数の Excel テーブルを 1 つの Word 文書に結合する

VBA を使用して複数の Excel テーブルを 1 つの Word 文書に結合する
VBA を使用して複数の Excel テーブルを 1 つの Word 文書に結合する

Excel データを Word に効率的に結合する

さまざまなプラットフォームにわたるデータの管理は、特に Excel の複数の表を Word 文書にコンパイルする必要がある場合に、面倒な作業になることがあります。 VBA を使用すると、このプロセスを自動化し、目的の形式と構造を維持しながらデータをシームレスに転送できます。

この記事では、現在 Excel テーブルから 3 つの個別の Word ドキュメントを作成する VBA マクロについて説明します。コードを変更して、単一の Word 文書内にすべての表を作成し、わかりやすく整理するために各表の後に改ページする方法を示します。

指示 説明
Set wdApp = New Word.Application Word アプリケーションの新しいインスタンスを初期化します。
wdDoc.Characters.Last.InsertBreak Type:=wdPageBreak 文書の最後に改ページを挿入します。
.Rows(1).HeadingFormat = True テーブルの最初の行がヘッダー行であることを指定します。
.Tables.Add(Range:=wdDoc.Range, NumRows:=2, NumColumns:=lCol) 指定された行と列を含む新しい表を Word 文書に追加します。
With wdTbl.Borders 表の内側と外側の線の境界線のスタイルを設定します。
wdApp.Visible = True Word アプリケーションをユーザーに表示します。
If (r - startRow + 2) >If (r - startRow + 2) > .Rows.Count Then .Rows.Add 現在の行が既存の行数を超える場合、テーブルに新しい行を追加します。
Set wdDoc = .Documents.Add Word アプリケーションで新しい文書を作成します。

テーブルを結合するための VBA マクロを理解する

提供されているスクリプトは、VBA を使用して複数の Excel テーブルから 1 つの Word ドキュメントにデータを転送するプロセスを自動化する方法を示しています。メインの脚本は、 Sub ConsolidateTablesInOneDocument()、Word アプリケーションの新しいインスタンスを初期化します。 Set wdApp = New Word.Application を使用して新しいドキュメントを作成します Set wdDoc = .Documents.Add。空白セルをチェックすることで表が終了する Excel の行を識別し、これらの位置を変数に保存します。 First そして Second。これにより、スクリプトは各テーブルの終了位置と開始位置を認識できるようになります。次に、マクロは次を使用して Word に表を作成します。 .Tables.Add(Range:=wdDoc.Range, NumRows:=2, NumColumns:=lCol) これらのテーブルに Excel からのデータを入力します。

各テーブルが明確に分離されていることを確認するために、スクリプトは次のコマンドを使用して各テーブルの後に改ページを挿入します。 wdDoc.Characters.Last.InsertBreak Type:=wdPageBreak。の CreateTable サブルーチンは 3 回呼び出され、各テーブルを生成してフォーマットします。このサブルーチンは、ヘッダーを定義し、行と列を設定し、表に境界線スタイルを適用します。 .Rows(1).Range.Font.Bold = True そして With wdTbl.Borders。最後に、マクロは Word アプリケーションの可視性を true に設定します。 wdApp.Visible = Trueにより、ユーザーは生成されたドキュメントを確実に見ることができます。このアプローチでは、Excel の複数の表を単一の Word 文書に効果的に統合し、明瞭さと形式を維持します。

複数の Excel テーブルを 1 つの Word 文書に統合する

このスクリプトは、Excel で VBA を使用して複数の表を 1 つの Word 文書に結合し、各表の後に改ページを行う方法を示します。

Sub ConsolidateTablesInOneDocument()
    Dim wdApp As New Word.Application
    Dim wdDoc As Word.Document
    Dim wdTbl As Word.Table
    Dim xlSht As Worksheet
    Dim lRow As Integer, lCol As Integer
    Dim r As Integer, c As Integer
    Dim Blanks As Integer, First As Integer, Second As Integer
    lRow = Sheets("Feedback Sheets").Range("A1000").End(xlUp).Row - 2
    Blanks = 0
    i = 1
    Do While i <= lRow
        Set rRng = Worksheets("Feedback Sheets").Range("A" & i)
        If IsEmpty(rRng.Value) Then
            Blanks = Blanks + 1
            If Blanks = 1 Then First = i
            If Blanks = 2 Then Second = i
        End If
        i = i + 1
    Loop
    Set xlSht = ActiveSheet: lCol = 5
    With wdApp
        .Visible = True
        Set wdDoc = .Documents.Add
        Call CreateTable(wdDoc, xlSht, 1, First, lCol)
        wdDoc.Characters.Last.InsertBreak Type:=wdPageBreak
        Call CreateTable(wdDoc, xlSht, First + 1, Second, lCol)
        wdDoc.Characters.Last.InsertBreak Type:=wdPageBreak
        Call CreateTable(wdDoc, xlSht, Second + 1, lRow, lCol)
    End With
End Sub
Sub CreateTable(wdDoc As Word.Document, xlSht As Worksheet, startRow As Integer, endRow As Integer, lCol As Integer)
    Dim wdTbl As Word.Table
    Dim r As Integer, c As Integer
    Set wdTbl = wdDoc.Tables.Add(Range:=wdDoc.Range, NumRows:=2, NumColumns:=lCol)
    With wdTbl
        .Rows(1).Range.Font.Bold = True
        .Rows(1).HeadingFormat = True
        .Cell(1, 1).Range.Text = "Header 1"
        If lCol > 1 Then .Cell(1, 2).Range.Text = "Header 2"
        If lCol > 2 Then .Cell(1, 3).Range.Text = "Header 3"
        For r = startRow To endRow
            If (r - startRow + 2) > .Rows.Count Then .Rows.Add
            For c = 1 To lCol
                .Cell(r - startRow + 2, c).Range.Text = xlSht.Cells(r, c).Text
            Next c
        Next r
    End With
    With wdTbl.Borders
        .InsideLineStyle = wdLineStyleSingle
        .OutsideLineStyle = wdLineStyleDouble
    End With
End Sub

VBA を使用して Excel データを Word に結合する

このスクリプトは VBA を使用して Excel シートの表を 1 つの Word 文書に結合し、適切な書式設定と改ページを保証します。

Sub MergeTablesIntoWord()
    Dim wdApp As New Word.Application
    Dim wdDoc As Word.Document
    Dim wdTbl As Word.Table
    Dim xlSht As Worksheet
    Dim lRow As Integer, lCol As Integer
    Dim r As Integer, c As Integer
    Dim Blanks As Integer, First As Integer, Second As Integer
    lRow = Sheets("Feedback Sheets").Range("A1000").End(xlUp).Row - 2
    Blanks = 0
    i = 1
    Do While i <= lRow
        Set rRng = Worksheets("Feedback Sheets").Range("A" & i)
        If IsEmpty(rRng.Value) Then
            Blanks = Blanks + 1
            If Blanks = 1 Then First = i
            If Blanks = 2 Then Second = i
        End If
        i = i + 1
    Loop
    Set xlSht = ActiveSheet: lCol = 5
    With wdApp
        .Visible = True
        Set wdDoc = .Documents.Add
        Set wdTbl = wdDoc.Tables.Add(Range:=wdDoc.Range, NumRows:=2, NumColumns:=lCol)
        PopulateTable wdTbl, xlSht, 1, First, lCol
        wdDoc.Characters.Last.InsertBreak Type:=wdPageBreak
        Set wdTbl = wdDoc.Tables.Add(Range:=wdDoc.Range, NumRows:=2, NumColumns:=lCol)
        PopulateTable wdTbl, xlSht, First + 1, Second, lCol
        wdDoc.Characters.Last.InsertBreak Type:=wdPageBreak
        Set wdTbl = wdDoc.Tables.Add(Range:=wdDoc.Range, NumRows:=2, NumColumns:=lCol)
        PopulateTable wdTbl, xlSht, Second + 1, lRow, lCol
    End With
End Sub
Sub PopulateTable(wdTbl As Word.Table, xlSht As Worksheet, startRow As Integer, endRow As Integer, lCol As Integer)
    Dim r As Integer, c As Integer
    With wdTbl
        .Rows(1).Range.Font.Bold = True
        .Rows(1).HeadingFormat = True
        .Cell(1, 1).Range.Text = "Header 1"
        If lCol > 1 Then .Cell(1, 2).Range.Text = "Header 2"
        If lCol > 2 Then .Cell(1, 3).Range.Text = "Header 3"
        For r = startRow To endRow
            If (r - startRow + 2) > .Rows.Count Then .Rows.Add
            For c = 1 To lCol
                .Cell(r - startRow + 2, c).Range.Text = xlSht.Cells(r, c).Text
            Next c
        Next r
    End With
    With wdTbl.Borders
        .InsideLineStyle = wdLineStyleSingle
        .OutsideLineStyle = wdLineStyleDouble
    End With
End Sub

VBA を使用した Word での表の作成と書式設定

VBA を使用して Excel から Word へのデータ転送を自動化する場合、テーブルを効果的に管理および書式設定する方法を理解することが重要です。重要な側面の 1 つは、データが正しく転送され、構造と可読性の両方が維持されることを保証することです。これには、テーブルの作成、書式設定、改ページの挿入を制御する VBA コマンドを理解する必要があります。たとえば、次のコマンドは Set wdTbl = wdDoc.Tables.Add(Range:=wdDoc.Range, NumRows:=2, NumColumns:=lCol) Excel データに基づいて行数と列数を指定して、Word 文書に新しい表を追加するために使用されます。

もう 1 つの重要な要素は、テーブルのフォーマットです。などのコマンド .Rows(1).Range.Font.Bold = True 最初の行を太字にしてヘッダーを示します。 wdTbl.Borders は、テーブルの内側と外側の両方の線の境界線スタイルを設定するために使用されます。さらに、各表を確実に別のページに表示するには、改ページの挿入が不可欠です。これは、次のコマンドを使用して行われます。 wdDoc.Characters.Last.InsertBreak Type:=wdPageBreak。これらのコマンドを組み合わせることで、最終的なドキュメントが適切に整理され、専門的にフォーマットされたことが保証されます。

Word および Excel の VBA マクロに関するよくある質問

  1. VBA を使用して新しい Word アプリケーションを起動するにはどうすればよいですか?
  2. 使用 Set wdApp = New Word.Application Word アプリケーションの新しいインスタンスを初期化します。
  3. VBA を使用して Word 文書に改ページを挿入するにはどうすればよいですか?
  4. 改ページを挿入する wdDoc.Characters.Last.InsertBreak Type:=wdPageBreak
  5. VBA を使用して Word 文書に表を追加するにはどうすればよいですか?
  6. を使用してテーブルを追加します wdDoc.Tables.Add(Range:=wdDoc.Range, NumRows:=2, NumColumns:=lCol)
  7. テーブルの最初の行をヘッダーとしてフォーマットするにはどうすればよいですか?
  8. 最初の行をヘッダーとして設定するには、 .Rows(1).HeadingFormat = True を使用して太字にします .Rows(1).Range.Font.Bold = True
  9. VBA を使用して Word で表の境界線を設定するにはどうすればよいですか?
  10. で境界線を設定します wdTbl.Borders、内側と外側の線のスタイルを指定します。
  11. VBA で Word アプリケーションをユーザーに表示するにはどうすればよいですか?
  12. 可視性を設定するには wdApp.Visible = True
  13. 現在の行が既存の行数を超えた場合、テーブルに新しい行を追加するにはどのようなコマンドが使用されますか?
  14. 新しい行を追加します If (r - startRow + 2) > .Rows.Count Then .Rows.Add
  15. VBA を使用して Word で新しい文書を作成するにはどうすればよいですか?
  16. で新しいドキュメントを作成します Set wdDoc = .Documents.Add

最終的な考え

VBA を使用して複数の Excel テーブルを 1 つの Word 文書に結合すると、データ転送と書式設定のプロセスが合理化されます。このマクロは、表の作成、書式設定、改ページを自動化することにより、最終的な文書が適切に整理され、プロフェッショナルに表現されることを保証します。このアプローチは時間を節約し、エラーのリスクを軽減するため、さまざまなプラットフォーム間でデータを管理および表示するための効率的なソリューションになります。