Categories: excel

VBAでExcelシートをコピーする方法|初心者にもわかるコード例付き解説

Excel作業を効率化するためにVBAを活用する方が増えています。特によく使われる操作のひとつが「シートのコピー」です。手作業でコピーするよりも、VBAで自動化してしまえば、繰り返し作業の手間を大幅に削減できます。この記事では、VBAでシートをコピーする基本から応用までを初心者にもわかりやすく解説します。サンプルコードも多数掲載しているので、コピペしてすぐに使えるようになっています。


VBAでシートをコピーする基本構文

VBAではWorksheet.Copyメソッドを使ってシートをコピーします。基本的な構文は以下の通りです。

Worksheets("Sheet1").Copy After:=Worksheets("Sheet2")

このコードは、「Sheet1」を「Sheet2」の後ろにコピーします。Beforeに変更すれば前にコピーできます。


新しいブックにシートをコピーする方法

以下のように書くと、指定したシートを新しいブックにコピーできます。

Worksheets("Sheet1").Copy

このコードを実行すると、「Sheet1」だけが含まれた新しいブックが作成されます。


最後尾にシートをコピーする方法

すでに存在しているブックの一番最後にシートをコピーしたい場合は、次のようにします。

Worksheets("Sheet1").Copy After:=Worksheets(Worksheets.Count)

このコードは「Sheet1」を現在の一番最後のシートの後ろにコピーします。


シート名を変更してコピーする方法

コピー後のシート名を変更したいときは、以下のように書きます。

Worksheets("Sheet1").Copy After:=Worksheets(Worksheets.Count)
ActiveSheet.Name = "コピー後のシート"

ActiveSheetは、コピー直後のシートを指します。


複数シートを一度にコピーする方法

複数のシートを同時にコピーしたい場合は、次のように書きます。

Sheets(Array("Sheet1", "Sheet2")).Copy After:=Worksheets("Sheet3")

このコードは「Sheet1」と「Sheet2」を「Sheet3」の後にコピーします。


すべてのシートを別のブックにコピーする方法

ブック内のすべてのシートを別のブックにコピーする場合は、次のようなコードを使います。

Worksheets.Copy

このコードは、全シートを含んだ新しいブックを作成します。


シートをコピーする際の注意点

1. 同名のシートがあるとエラーになる

VBAでコピーした後にシート名を変更しないと、次回以降の実行時に「すでに同じ名前のシートがある」というエラーになります。対策として、シート名に日時などを加えるとよいでしょう。

ActiveSheet.Name = "Report_" & Format(Now, "yyyymmdd_hhnnss")

2. 非表示シートのコピー

非表示のシートをコピーすることも可能です。ただし、コピー後のシートがアクティブになるので、意図せず表示されてしまう点に注意しましょう。


実用例:テンプレートを元に新しいシートを作る

たとえば、テンプレートシート「Template」を元に新しい作業用シートを作る場合、以下のように書けます。

Sub CreateNewSheet()
Worksheets("Template").Copy After:=Worksheets(Worksheets.Count)
ActiveSheet.Name = "作業用_" & Format(Now, "mmdd_hhmm")
End Sub

このコードを実行すると、テンプレートシートを元にした新しいシートが作成され、日付と時間で一意な名前が付けられます。


応用編:シート名を指定してコピー先を選ぶ

ユーザーにコピー先を選ばせたい場合、InputBoxを使って対象シート名を取得することもできます。

Sub CopyToTarget()
Dim targetName As String
targetName = InputBox("コピー先のシート名を入力してください")

If SheetExists(targetName) Then
Worksheets("Sheet1").Copy After:=Worksheets(targetName)
Else
MsgBox "指定されたシートは存在しません。"
End If
End Sub

Function SheetExists(sheetName As String) As Boolean
On Error Resume Next
SheetExists = Not Worksheets(sheetName) Is Nothing
On Error GoTo 0
End Function

エラー回避のポイント

  • On Error Resume Nextを使って、存在しないシートを参照した場合でもエラーで止まらないようにする
  • 既存のシート名をチェックして、重複しないように調整する
  • コピー後にすぐ名前を変更することを習慣化する

まとめ

VBAを使えば、Excelシートのコピー操作を柔軟に自動化できます。
基本的な1枚のシートコピーから、複数シート、テンプレート活用、動的なコピー先の指定まで、さまざまな場面で活躍します。
作業を効率化したい方は、ぜひVBAのシートコピー機能を活用してみてください。

upandup

Web制作の記事を中心に、暮らし、ビジネスに役立つ情報を発信します。 アフィリエイトにも参加しています。よろしくお願いいたします。