複数のシートの表を 1 つのシートに結合する

複数のシートの表を 1 つのシートに結合する

30 シートを超える Excel ドキュメントがあります。各シートのレイアウトは同じです。列、ヘッダー/合計行は同じですが、行数は異なります (500 行を超えるものはありません)。

これらをマスター テーブルに結合したいのですが、操作は 1 回のみです。

手動では、30 個のテーブルを新しいワークシートに次々にコピーできます。完了したら、並べ替えを行い、空白/ヘッダー/合計行を削除します。書式設定は気にしません。15 ~ 20 分ほどかかると思いますが、ミスをしてシートを見落とすなどのリスクは常にあります。

VBA は時間がかかりすぎるようです。現在、ワークブックを SQL Server にインポートし、UNION して結果をコピーして Excel に貼り付けることを検討しています。

何か良いコツはありますか?

答え1

これを頻繁に行う必要がある場合は、簡単な VBA ルーチンを作成することをお勧めします。1 回限りの場合は、手動で行うことをお勧めします。誤ってテーブルをスキップしないようにするには、コピー アンド ペーストではなく、カット アンド ペーストを使用します。

これが私が行う方法です。キーボードショートカットを使用するとかなり早く実行できます。

  • 誤ってデータが失われるのを防ぐために、元のブックを Excel で読み取り専用として開きます。
  • 新しいマスター テーブルを保持する新しいワークブックを開きます。
  • 作業中の 2 つのワークブックを簡単に切り替えられるように、他のワークブックをすべて閉じます。
  • コピーする元のブックの最初のワークシートを選択します。

これでキーボードショートカットが使用できるようになります。

  1. Ctrl + Homeスプレッドシートの左上へジャンプします。(行または列が固定されていない限り、A1 へジャンプします。)
  2. Shift + Ctrl + End現在選択されているセルの左と下のすべてを選択します。
  3. Ctrl + Xデータをカットします。
  4. Ctrl + Tab新しいワークブックに切り替えます。
  5. 正しい場所にいることを再確認し、押してEnterデータを貼り付けます。
  6. Ctrl + End最後に貼り付けたセルに移動します。
  7. Down Arrow次の未使用の行に移動します。
  8. Ctrl + Left Arrow列Aに戻ります。
  9. Ctrl + Tab元のワークブックに戻ります。
  10. Ctrl + Page Down次のワークシートを選択します。
  11. 手順 1 に戻り、完了するまで繰り返します。

完了したら、Ctrl + Page Up元のワークシートをすべて戻って、すべてのデータが削除されたことを確認できます。

タイトル行が固定されていないと仮定すると、これは 30 個のテーブルすべてからタイトル行をコピーします。その場合、マスター テーブルを並べ替えて重複するタイトル行をすべてグループ化し、余分な行を削除するか、[データ] -> [重複の削除] を使用します。

誤って手順をスキップしたり、既存のデータを上書き貼り付けしたりした場合は、 を押してCtrl + Z元に戻します。

上記の手順に従ってテストしてみました。使用したワークブックには、それぞれ 120 行のデータを含む 10 個のワークシートがありました。マスター テーブルの作成には 1 分半かかりました。キーボード ショートカットに慣れていない場合は、2 倍の時間がかかる可能性があります。ワークシートが 30 個の場合、10 分ほどかかると思います。

答え2

私も同じ問題を抱えていましたが、ここで素晴らしいマクロを見つけました: http://excel.tips.net/T003005_Condensing_Multiple_Worksheets_Into_One.html

Sub Combine()
    Dim J As Integer

    On Error Resume Next
    Sheets(1).Select
    Worksheets.Add ' add a sheet in first place
    Sheets(1).Name = "Combined"

    ' copy headings
    Sheets(2).Activate
    Range("A1").EntireRow.Select
    Selection.Copy Destination:=Sheets(1).Range("A1")

    ' work through sheets
    For J = 2 To Sheets.Count ' from sheet 2 to last sheet
        Sheets(J).Activate ' make the sheet active
        Range("A1").Select
        Selection.CurrentRegion.Select ' select all cells in this sheets

        ' select all lines except title
        Selection.Offset(1, 0).Resize(Selection.Rows.Count - 1).Select

        ' copy cells selected in the new sheet on last line
        Selection.Copy Destination:=Sheets(1).Range("A65536").End(xlUp)(2)
    Next
End Sub

マクロをコピーして貼り付け、実行するだけで完了です。

関連情報