- ベストアンサー
Excel2007 VBAでブックのコピーについて
- VBAでブックのコピー方法を教えてください。
- Book1とBook2のシートデータを統合したものをBook3に書き出したいです。
- 具体的な希望結果は、Book3にはBook1とBook2のシートデータを整列させて書き出したいです。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
以下のような処理で如何でしょう。 Sub 複製処理() Dim 作業シート As Worksheet Dim 行 As Long Dim 行数 As Long Dim シート数 As Long Dim ブック名 As String Dim シート名 As String Dim ブック1 As Workbook Dim ブック2 As Workbook Dim ブック3 As Workbook Dim 汎用データ As Variant 'ブック1を開く Set ブック1 = Workbooks.Open("C:\~\book1.xls") 'ブック2を開く Set ブック2 = Workbooks.Open("C:\~\book2.xls") '作業シートを設定してクリアする Set 作業シート = ThisWorkbook.Worksheets(1) 作業シート.Cells.ClearContents 'ブック1のシート名を列挙する For Each 汎用データ In ブック1.Worksheets 行数 = 行数 + 1 作業シート.Cells(行数, 1) = 汎用データ.Name 作業シート.Cells(行数, 2) = ブック1.Name Next 'ブック2のシート名を列挙する For Each 汎用データ In ブック2.Worksheets 行数 = 行数 + 1 作業シート.Cells(行数, 1) = 汎用データ.Name 作業シート.Cells(行数, 2) = ブック2.Name Next '名前順に並べ替える 作業シート.Columns("A:B").Sort 作業シート.Cells(1, 1) '削除時の確認をさせないようにする Application.DisplayAlerts = False 'ブック3を作りシートを1個に減らす Set ブック3 = Workbooks.Add Do While ブック3.Worksheets.Count > 1 ブック3.Worksheets(1).Delete Loop '現在のブック3のシート数を記録する シート数 = 1 'シートをコピーする For 行 = 1 To 行数 'ブック名とシート名を取得する シート名 = 作業シート.Cells(行, 1) ブック名 = 作業シート.Cells(行, 2) 'コピー対象シートを設定する Set 汎用データ = Workbooks(ブック名) Set 汎用データ = 汎用データ.Worksheets(シート名) 汎用データ.Copy , ブック3.Worksheets(シート数) If 行 = 1 Then '最初だけ削除できなかったシートを削除する ブック3.Worksheets(1).Delete Else '2シート目からシート数を更新する シート数 = シート数 + 1 End If Next 'ブック3を保存する ブック3.SaveAs "C:\~\book3.xls" '警告を元に戻す Application.DisplayAlerts = True End Sub
お礼
ありがとうございます 大変助かりました