「マクロ シート コピー 別ブック 先頭」
「excel マクロ シート コピー 別ファイル」
「ワークシート コピー 別 ファイル vba コ-ド」
といった検索で、このサイト・インストラクターのネタ帳へのアクセスが時折あります。
シートを別のブック・別のファイルにコピーする、Excelマクロ・VBA(Visual Basic for Applications)のコードを探している方による検索です。
アクティブシートを別ブックの先頭にコピーするサンプルマクロ
以下のマクロが、
「マクロ シート コピー 別ブック 先頭」
という検索をなさった方の参考になるでしょう。
ActiveSheet.Copy _
Before:=Workbooks("コピー先のブック.xlsx").Sheets(1)
End Sub
「コピー先のブック」という名前のxlsxファイルが開かれている状態で、上記のマクロを実行すると、アクティブなブックのアクティブなシートが、「コピー先のブック.xlsx」ファイルの先頭にコピーされます。
WorksheetオブジェクトのCopyメソッドの引数・Beforeに、
コピー先を指定すれば、指定されたシートの前(Before)にコピーが行われます。
この引数・Beforeに「Workbooks("コピー先のブック.xlsx").Sheets(1)」というオブジェクト式を指定することで、「コピー先のブック.xlsx」ブックの1枚目のシートの前にコピーが行われます。
コピーする先は上記のとおりCopyメソッドの引数で指定し、コピーの元はCopyの前のオブジェクト式で指定します。
例えば、
Sheets(1).Copy _
Before:=Workbooks("コピー先のブック.xlsx").Sheets(1)
としてやれば、アクティブなブックの1枚目のシートが、「コピー先のブック.xlsx」ブックの1枚目のシートの前にコピーが行われます。
アクティブシートを別ブックの末尾にコピーするサンプルマクロ
実務では、別のブックの末尾にコピーしたいという要望もよくいただきます。
いくつかの書き方が考えられますが、
「excel マクロ シート コピー 別ファイル」
「ワークシート コピー 別 ファイル vba コ-ド」
という検索をなさったレベルの方の場合、以下のマクロがもっとも理解しやすいでしょう。
Dim cnt As Long ' コピー先ブックのシートの枚数
cnt = Workbooks("コピー先のブック.xlsx").Sheets.Count
ActiveSheet.Copy _
After:=Workbooks("コピー先のブック.xlsx").Sheets(cnt)
End Sub
Worksheet.Copyメソッドの引数・Afterを指定すると、
指定されたシートの後ろ(After)にコピーが行われます。
コピー先ブックの、シート枚数を変数・cntに格納しておいてから、
cnt = Workbooks("コピー先のブック.xlsx").Sheets.Count
Worksheet.CopyメソッドのAfterに、その変数・cntを使って末尾のシートを指定を行っています。
ActiveSheet.Copy _
After:=Workbooks("コピー先のブック.xlsx").Sheets(cnt)
「Workbooks("コピー先のブック.xlsx").Sheets」とオブジェクトの階層をしっかり記述しなければならないのは、先にご紹介した別ブックの先頭にコピーする場合と同じです。
オブジェクト変数を使ってアクティブシートを別ブックの末尾にコピーするサンプルマクロ
オブジェクト変数を使って、別ブックの末尾にコピーするのなら以下のようなマクロです。
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でしょう。
With Workbooks("コピー先のブック.xlsx")
ActiveSheet.Copy _
After:=.Sheets(.Sheets.Count)
End With
End Sub
最終更新日時:2020-11-13 10:23
- Newer:独学で勉強してきたけれど知らないことがたくさんあった
- Older:Word VBAでヘッダーにShapeを挿入する
Home » エクセルマクロ・Excel VBAの使い方 » Sheets・Worksheet » シートを別のブックにコピーするExcelマクロ