【Excel VBA】既存のワークシートをコピー(複製)する方法 (.Copy)

月次レポートの作成などで、書式や数式が整った「ひな形」シートを毎月複製して使いたい、という場面は非常に多いです。手作業でシートをコピーするのは簡単ですが、VBAを使えばそのプロセスを完全に自動化できます。

この記事では、Worksheet.Copyメソッドを使って、ひな形となるシートを複製し、任意の位置に配置して名前を変更するまでの一連の流れを解説します。


目次

Worksheet.Copy メソッドの基本

.Copyメソッドは、指定したシートを複製するための命令です。

コピーしたいシート.Copy [Before], [After]

  • Before引数: 指定したシートの**前(左隣)**にコピーを配置します。
  • After-引数: 指定したシートの**後(右隣)**にコピーを配置します。

このBeforeAfterは、どちらか一方しか指定できません。


完成したVBAコード(実用例)

ここでは、実務でよく使われる2つのパターンをコード例として紹介します。

① 特定のシートの後ろにコピーする

「8月」シートの後ろに「ひな形」シートをコピーし、「9月」という名前に変更する例です。

Sub CopySheetAfter()

    ' 変数を宣言します
    Dim referenceSheet As Worksheet
    Dim templateSheet As Worksheet
    
    ' 基準となるシートと、コピー元のひな形シートを設定します
    Set referenceSheet = ThisWorkbook.Worksheets("8月")
    Set templateSheet = ThisWorkbook.Worksheets("ひな形")
    
    ' 「ひな形」シートを、「8月」シートの後ろにコピーします
    templateSheet.Copy After:=referenceSheet
    
    ' コピーして作られた新しいシート(基準シートのすぐ右隣)の名前を変更します
    referenceSheet.Next.Name = "9月"
    
    MsgBox "シートをコピーし、名前を変更しました。"

End Sub

.Nextプロパティは、指定したシートのすぐ右隣のシートを指します。これを使うことで、コピーしたてのシートをスマートに特定できます。

② ブックの先頭にコピーする

「ひな形」シートをブックの一番左(先頭)にコピーし、名前を変更する例です。

Sub CopySheetToBeginning()

    ' 「ひな形」シートを、ブックの一番左(1番目のシートの前)にコピーします
    ThisWorkbook.Worksheets("ひな形").Copy Before:=ThisWorkbook.Worksheets(1)
    
    ' Copyメソッドを実行すると、新しく作られたシートがアクティブになるため、
    ' ActiveSheetとして名前を変更できます。
    ActiveSheet.Name = "最新集計"
    
    MsgBox "シートをブックの先頭にコピーし、名前を変更しました。"

End Sub

コードのポイント解説

コピーしたシートの参照方法

.Copyメソッドで新しく作成されたシートをVBAで操作(名前の変更など)するには、そのシートを正確に参照する必要があります。

  • 方法A: .Next.Previous プロパティを使う After:=mySheetでコピーした場合、mySheet.Nextで新しいシートを参照できます。同様にBeforeの場合は.Previousが使えます。相対的な位置が明確な場合に便利な、スマートな方法です。
  • 方法B: ActiveSheet を使う .Copyメソッドを実行すると、新しく作成されたシートが必ずアクティブな状態になります。 この性質を利用して、コピー直後にActiveSheetと記述すれば、ほぼ確実に新しいシートを参照できます。これは非常に汎用性が高く、よく使われるパターンです。

【注意】引数を省略した場合

もし、BeforeAfterの両方の引数を省略して、 Worksheets("ひな形").Copy とだけ記述すると、「ひな形」シートは新しいブックにコピーされます。

シートを別のファイルとして独立させたい場合に便利な機能ですが、意図しない動作になることもあるため、同じブック内でコピーしたい場合は、必ずBeforeAfterを指定するようにしましょう。


まとめ

ワークシートをVBAでコピーする際の基本は以下の通りです。

  • .Copy メソッドを使い、Before または After 引数で位置を指定する。
  • 引数を省略すると、新しいブックにコピーされる。
  • コピーされた直後のシートは ActiveSheet になるため、これを利用して名前の変更などを行うのが確実。

この.Copyメソッドをマスターすれば、月次レポートの自動生成や、分析用シートの量産など、定型業務の効率を飛躍的に向上させることができます。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次