• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Excel2007 VBAでブックのコピーについて)

Excel2007 VBAでブックのコピーについて

このQ&Aのポイント
  • VBAでブックのコピー方法を教えてください。
  • Book1とBook2のシートデータを統合したものをBook3に書き出したいです。
  • 具体的な希望結果は、Book3にはBook1とBook2のシートデータを整列させて書き出したいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • nda23
  • ベストアンサー率54% (777/1415)
回答No.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

ryuujinn11
質問者

お礼

ありがとうございます 大変助かりました

関連するQ&A