【VBA】ワークシートをコピーする

エクセルVBAで使うコードの備忘録。VBAでワークシートをコピーするコード。コピー先として新規のワークブックや別のワークブックを指定する方法についてもご紹介します。

スポンサーリンク

新規のワークブックにコピーする

ワークブックをコピーするには、WorksheetオブジェクトのCopyメソッドを使用します。

なお、サンプルコードを使用する際はカッコに囲まれた部分([***])を自分のプログラムに合わせて変更してください。

ワークシートを新規のブックにコピーする

Public Sub CopyWorksheet()
    
    '--- コピーしたいワークシートオブジェクト ---'
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets("[ワークシート名]")
    
    '--- ワークシートをコピーする ---'
    Call ws.Copy
    
End Sub

コピー先の新規ブックはアクティブな状態で生成されるので、コピー後のワークブックを操作したい場合には下記のようにアクティブワークブックを取得してやればOKです。

Public Sub CopyWorksheet()
    
    '--- コピーしたいワークシートオブジェクト ---'
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets("[ワークシート名]")
    
    '--- ワークシートをコピーする ---'
    Call ws.Copy
    
    '--- コピー先のワークブックを取得 ---'
    Dim wbTo as Workbook
    Set wbTo = ActiveWorkbook

End Sub

指定した別のワークブックにコピーする

新規のワークブックではなく指定した別のワークブックにコピーする場合は、コピー先を引数として指定してやる必要があります。指定の仕方は引数として「After」あるいは「Before」という名前のパラメータにワークシートオブジェクトを与えます。パラメーターの意味はその名前の通りで、「After」は指定したワークシートの後に、「Before」は指定したワークシートの前にコピーします。

こちらも、サンプルコードを使用する際はカッコに囲まれた部分([***])を自分のプログラムに合わせて変更してください。

ワークシートを別のブックにコピーする

Public Sub CopyWorksheet()
    
    '--- コピーしたいワークシートオブジェクト ---'
    Dim wsFrom As Worksheet
    Set wsFrom = ThisWorkbook.Worksheets("[ワークシート名]")
    
    '--- コピー先のワークシートオブジェクト ---'
    Dim wbTo As Workbook
    Set wbTo = Workbooks.Open("[ワークブックのパス]")
    Dim wsTo As Worksheet
    Set wsTo = wbTo.Worksheets("[ワークシート名]")
    
    '--- 指定ワークシートの直前にコピー ---'
    Call wsFrom.Copy(Before:=wsTo)
    
    '--- 指定ワークシートの直後にコピー ---'
    Call wsFrom.Copy(After:=wsTo)
    
End Sub

ちなみに、コピー先のワークブックの先頭にコピーしたい場合は、

Set wsTo = wbTo.Worksheets(1)
Call wsFrom.Copy(Before:=wsTo)

最後尾にコピーしたい場合は、

Set wsTo = wbTo.Worksheets(wbTo.Worksheets.Count)
Call wsFrom.Copy(After:=wsTo)

と書き換えてやればOKです。