Aerial view of a man using computer laptop on wooden table
Excel作業を効率化するために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
このコードは、全シートを含んだ新しいブックを作成します。
VBAでコピーした後にシート名を変更しないと、次回以降の実行時に「すでに同じ名前のシートがある」というエラーになります。対策として、シート名に日時などを加えるとよいでしょう。
ActiveSheet.Name = "Report_" & Format(Now, "yyyymmdd_hhnnss")
非表示のシートをコピーすることも可能です。ただし、コピー後のシートがアクティブになるので、意図せず表示されてしまう点に注意しましょう。
たとえば、テンプレートシート「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のシートコピー機能を活用してみてください。