【VBA】ブックを跨いでシートをコピー・移動する

Excelでは、手動でもシートをドラッグして他のブックにコピーや移動ができますが、VBAを使うとこれを自動化できます。
コピーと移動では動作が異なるため、用途に応じて使い分けましょう。


1. シートを別ブックへコピーする

Sub CopySheetToAnotherWorkbook()
    Dim srcWb As Workbook
    Dim destWb As Workbook
    Dim filePath As String
    
    'コピー先ブックのパス
    filePath = "C:\Test\Dest.xlsx"
    
    'コピー元ブックを指定
    Set srcWb = ThisWorkbook
    
    'コピー先ブックを開く
    Set destWb = Workbooks.Open(filePath)
    
    'シートをコピー(末尾に追加)
    srcWb.Sheets("Sheet1").Copy After:=destWb.Sheets(destWb.Sheets.Count)
    
    '保存して閉じる
    destWb.Save
    destWb.Close
End Sub

解説:

  • .Copy … コピーしたシートを指定先に追加
  • After:=destWb.Sheets(destWb.Sheets.Count) … コピー先ブックの一番後ろに挿入
  • コピー元ブックは閉じずにそのまま残る

2. シートを別ブックへ移動する

Sub MoveSheetToAnotherWorkbook()
    Dim srcWb As Workbook
    Dim destWb As Workbook
    Dim filePath As String
    
    filePath = "C:\Test\Dest.xlsx"
    Set srcWb = ThisWorkbook
    Set destWb = Workbooks.Open(filePath)
    
    'シートを移動(末尾へ)
    srcWb.Sheets("Sheet1").Move After:=destWb.Sheets(destWb.Sheets.Count)
    
    '保存して閉じる
    destWb.Save
    destWb.Close
End Sub

解説:

  • .Move … シートを移動(コピー元からは削除される)
  • データを残したい場合は .Copy を使うべき

3. 新規ブックにコピーする

Sub CopySheetToNewWorkbook()
    ThisWorkbook.Sheets("Sheet1").Copy
End Sub

解説:

  • .Copy だけで、新しいブックが自動的に作成される
  • 作成後に ActiveWorkbook.SaveAs で保存可能

4. 注意点

  • コピーや移動の際、シート名が重複しているとエラーになる
  • 移動の場合は元のブックからシートが削除されるため、必要に応じてバックアップを取る
  • コピー先ブックを閉じる前に必ず保存するようにする

コメント

タイトルとURLをコピーしました