エクセル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です。