月次レポートの作成などで、書式や数式が整った「ひな形」シートを毎月複製して使いたい、という場面は非常に多いです。手作業でシートをコピーするのは簡単ですが、VBAを使えばそのプロセスを完全に自動化できます。
この記事では、Worksheet.Copy
メソッドを使って、ひな形となるシートを複製し、任意の位置に配置して名前を変更するまでの一連の流れを解説します。
Worksheet.Copy メソッドの基本
.Copy
メソッドは、指定したシートを複製するための命令です。
コピーしたいシート.Copy [Before], [After]
Before
引数: 指定したシートの**前(左隣)**にコピーを配置します。After
-引数: 指定したシートの**後(右隣)**にコピーを配置します。
このBefore
とAfter
は、どちらか一方しか指定できません。
完成した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
と記述すれば、ほぼ確実に新しいシートを参照できます。これは非常に汎用性が高く、よく使われるパターンです。
【注意】引数を省略した場合
もし、Before
とAfter
の両方の引数を省略して、 Worksheets("ひな形").Copy
とだけ記述すると、「ひな形」シートは新しいブックにコピーされます。
シートを別のファイルとして独立させたい場合に便利な機能ですが、意図しない動作になることもあるため、同じブック内でコピーしたい場合は、必ずBefore
かAfter
を指定するようにしましょう。
まとめ
ワークシートをVBAでコピーする際の基本は以下の通りです。
.Copy
メソッドを使い、Before
またはAfter
引数で位置を指定する。- 引数を省略すると、新しいブックにコピーされる。
- コピーされた直後のシートは
ActiveSheet
になるため、これを利用して名前の変更などを行うのが確実。
この.Copy
メソッドをマスターすれば、月次レポートの自動生成や、分析用シートの量産など、定型業務の効率を飛躍的に向上させることができます。