Excel VBAを使えば、複数のExcelファイル間でシートの内容を簡単にコピーできます。
業務で頻繁に使う処理の一つですが、WorkbookオブジェクトやRangeの指定方法に慣れていないと、うまく動作しないこともあります。
この記事では、VBAでシートを別ファイルにコピーする方法を、実行コードとともにわかりやすく解説します。
1.使用するVBAコード
以下のコードでは、hoge1.xlsx
の「hoge1」シートを、同じフォルダ内にあるhoge2.xlsx
の「hoge2」シートにコピーしています。
Sub CopySheetBetweenWorkbooks()
Dim Wb_hoge1 As Workbook
Dim Wb_hoge2 As Workbook
Set Wb_hoge1 = Workbooks.Open("C:\hogehoge\hoge1.xlsx")
Set Wb_hoge2 = Workbooks.Open("C:\hogehoge\hoge2.xlsx")
Wb_hoge1.Worksheets("hoge1").Range("A1:XFD1048576").Copy
Wb_hoge2.Worksheets("hoge2").Range("A1:XFD1048576")
End Sub
このコードでは、すべてのセル範囲(A1からXFD1048576)を対象にコピーしています。
Excelの最大セル範囲を指定することで、シート全体を漏れなくコピーできます。
hoge1.xlsx 内は以下のように黄色塗りにしておき、サイズも hoge2.xlsx と比べ7KB大きくなるようにすることでコピー後の変化を分かりやすくしています。

1-1.コードのポイント解説
Dim Wb_hoge1 As Workbook
コピー元のファイルを格納する変数を定義します。
Set Wb_hoge1 = Workbooks.Open(...)
対象のExcelファイルを開きます。
Wb_hoge1.Worksheets("hoge1").Range("A1:XFD1048576").Copy
シート全体をコピーするための範囲を指定します。
Wb_hoge2.Worksheets("hoge2").Range("A1:XFD1048576")
コピー先のシートにペーストします。
2.実行結果
hoge1.xlsx のシート「hoge1」の内容が hoge2.xlsx のシート「hoge2」にコピーされ、コピー元のファイルと同じく各セルが黄色塗となっていることが確認できます。
また、ファイルサイズがコピー後に増加していることから、データが正しく移行されたことがわかります。

3.まとめ
今回紹介したコードは、ファイル間のシートコピーであり、利用する機会も多いと思いますし、私もよく利用しているコードです。
少しでも日々の業務や作業の効率化の助けに慣れると嬉しいです。