Home » エクセルマクロ・Excel VBAの使い方 » Sheets・Worksheet » シートを別のブックにコピーするExcelマクロ

シートを別のブックにコピーするExcelマクロ

対象:Excel2007, Excel2010, Excel2013, Windows版Excel2016

シートを別のブックにコピーするExcelマクロ

「マクロ シート コピー 別ブック 先頭」
「excel マクロ シート コピー 別ファイル」
「ワークシート コピー 別 ファイル vba コ-ド」
といった検索で、このサイト・インストラクターのネタ帳へのアクセスが時折あります。

シートを別のブック・別のファイルにコピーする、Excelマクロ・VBA(Visual Basic for Applications)のコードを探している方による検索です。

[スポンサードリンク]

アクティブシートを別ブックの先頭にコピーするサンプルマクロ

以下のマクロが、
「マクロ シート コピー 別ブック 先頭」
という検索をなさった方の参考になるでしょう。

Sub アクティブシートを別ブックの先頭にコピーする()
 ActiveSheet.Copy _
   Before:=Workbooks("コピー先のブック.xlsx").Sheets(1)
End Sub

「コピー先のブック」という名前のxlsxファイルが開かれている状態で、上記のマクロを実行すると、アクティブなブックのアクティブなシートが、「コピー先のブック.xlsx」ファイルの先頭にコピーされます。

WorksheetオブジェクトのCopyメソッドの引数・Beforeに、

シートを別のブックにコピーするExcelマクロ

コピー先を指定すれば、指定されたシートの前(Before)にコピーが行われます。

この引数・Beforeに「Workbooks("コピー先のブック.xlsx").Sheets(1)」というオブジェクト式を指定することで、「コピー先のブック.xlsx」ブックの1枚目のシートの前にコピーが行われます。

コピーする先は上記のとおりCopyメソッドの引数で指定し、コピーの元はCopyの前のオブジェクト式で指定します。

例えば、
 Sheets(1).Copy _
   Before:=Workbooks("コピー先のブック.xlsx").Sheets(1)
としてやれば、アクティブなブックの1枚目のシートが、「コピー先のブック.xlsx」ブックの1枚目のシートの前にコピーが行われます。

アクティブシートを別ブックの末尾にコピーするサンプルマクロ

実務では、別のブックの末尾にコピーしたいという要望もよくいただきます。

いくつかの書き方が考えられますが、
「excel マクロ シート コピー 別ファイル」
「ワークシート コピー 別 ファイル vba コ-ド」
という検索をなさったレベルの方の場合、以下のマクロがもっとも理解しやすいでしょう。

Sub アクティブシートを別ブックの末尾にコピーする()
 Dim cnt As Long ' コピー先ブックのシートの枚数
 cnt = Workbooks("コピー先のブック.xlsx").Sheets.Count
 ActiveSheet.Copy _
   After:=Workbooks("コピー先のブック.xlsx").Sheets(cnt)
End Sub

Worksheet.Copyメソッドの引数・Afterを指定すると、

シートを別のブックにコピーするExcelマクロ

指定されたシートの後ろ(After)にコピーが行われます。

コピー先ブックの、シート枚数を変数・cntに格納しておいてから、
 cnt = Workbooks("コピー先のブック.xlsx").Sheets.Count
Worksheet.CopyメソッドのAfterに、その変数・cntを使って末尾のシートを指定を行っています。
 ActiveSheet.Copy _
   After:=Workbooks("コピー先のブック.xlsx").Sheets(cnt)

「Workbooks("コピー先のブック.xlsx").Sheets」とオブジェクトの階層をしっかり記述しなければならないのは、先にご紹介した別ブックの先頭にコピーする場合と同じです。

オブジェクト変数を使ってアクティブシートを別ブックの末尾にコピーするサンプルマクロ

オブジェクト変数を使って、別ブックの末尾にコピーするのなら以下のようなマクロです。

Sub アクティブシートを別ブックの末尾にコピーする_オブジェクト変数()
 Dim bk As Workbook
 Set bk = Workbooks("コピー先のブック.xlsx")
 ActiveSheet.Copy _
   After:=bk.Sheets(bk.Sheets.Count)
End Sub

Workbook型のオブジェクト変数・bkに「コピー先のブック.xlsx」をセットして、
 Set bk = Workbooks("コピー先のブック.xlsx")
そのオブジェクト変数・bkを利用してコピー先を指定しています。
 ActiveSheet.Copy _
   After:=bk.Sheets(bk.Sheets.Count)

オブジェクト変数が苦手な方は、ローカルウィンドウでオブジェクト変数の中身を確認することを、しばらく続けましょう。

Withを使ってアクティブシートを別ブックの末尾にコピーするサンプルマクロ

オブジェクト式の文法をしっかり理解できている方なら、以下のようなWithステートメントを使ったマクロでもOKでしょう。

Sub アクティブシートを別ブックの末尾にコピーする_With()
 With Workbooks("コピー先のブック.xlsx")
  ActiveSheet.Copy _
    After:=.Sheets(.Sheets.Count)
 End With
End Sub

最終更新日時:2020-11-13 10:23

[スポンサードリンク]

Home » エクセルマクロ・Excel VBAの使い方 » Sheets・Worksheet » シートを別のブックにコピーするExcelマクロ

「Sheets・Worksheet」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.