30 シートを超える Excel ドキュメントがあります。各シートのレイアウトは同じです。列、ヘッダー/合計行は同じですが、行数は異なります (500 行を超えるものはありません)。
これらをマスター テーブルに結合したいのですが、操作は 1 回のみです。
手動では、30 個のテーブルを新しいワークシートに次々にコピーできます。完了したら、並べ替えを行い、空白/ヘッダー/合計行を削除します。書式設定は気にしません。15 ~ 20 分ほどかかると思いますが、ミスをしてシートを見落とすなどのリスクは常にあります。
VBA は時間がかかりすぎるようです。現在、ワークブックを SQL Server にインポートし、UNION して結果をコピーして Excel に貼り付けることを検討しています。
何か良いコツはありますか?
答え1
これを頻繁に行う必要がある場合は、簡単な VBA ルーチンを作成することをお勧めします。1 回限りの場合は、手動で行うことをお勧めします。誤ってテーブルをスキップしないようにするには、コピー アンド ペーストではなく、カット アンド ペーストを使用します。
これが私が行う方法です。キーボードショートカットを使用するとかなり早く実行できます。
- 誤ってデータが失われるのを防ぐために、元のブックを Excel で読み取り専用として開きます。
- 新しいマスター テーブルを保持する新しいワークブックを開きます。
- 作業中の 2 つのワークブックを簡単に切り替えられるように、他のワークブックをすべて閉じます。
- コピーする元のブックの最初のワークシートを選択します。
これでキーボードショートカットが使用できるようになります。
Ctrl + Home
スプレッドシートの左上へジャンプします。(行または列が固定されていない限り、A1 へジャンプします。)Shift + Ctrl + End
現在選択されているセルの左と下のすべてを選択します。Ctrl + X
データをカットします。Ctrl + Tab
新しいワークブックに切り替えます。- 正しい場所にいることを再確認し、押して
Enter
データを貼り付けます。 Ctrl + End
最後に貼り付けたセルに移動します。Down Arrow
次の未使用の行に移動します。Ctrl + Left Arrow
列Aに戻ります。Ctrl + Tab
元のワークブックに戻ります。Ctrl + Page Down
次のワークシートを選択します。- 手順 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
マクロをコピーして貼り付け、実行するだけで完了です。