はじめに
複数のシートを扱うExcelブックでは、「毎月同じフォーマットのシートを追加する」「特定のシートを別ブックへコピーする」「シートの並び順を整理する」といった作業が頻繁に発生します。これらの操作はすべて手作業でも可能ですが、シート数が多くなるほど時間がかかり、ミスも起きやすくなります。
この記事では、VBAでシートの追加・コピー・移動を自動化するWorksheets.Add・Copy・Moveメソッドの使い方を、実務でそのまま使えるコード例とともに解説します。
シートを新規追加する:Worksheets.Addメソッド
新しいシートを追加するにはWorksheets.Addメソッドを使います。追加位置はBeforeまたはAfter引数で指定します。
Sub AddNewSheet()
Dim newSheet As Worksheet
Set newSheet = ThisWorkbook.Worksheets.Add(After:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count))
newSheet.Name = "新規シート"
End Sub
Afterに「最後のシート」を指定することで、追加したシートを一番右に配置しています。シート名は追加後にNameプロパティで設定するのが基本パターンです。同名のシートがすでに存在するとエラーになるため、名前の重複チェックを入れておくとより安全です。
Sub AddNewSheetSafely()
Dim newSheet As Worksheet
Dim sheetName As String
sheetName = "新規シート"
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
If ws.Name = sheetName Then
MsgBox sheetName & " は既に存在します。"
Exit Sub
End If
Next ws
Set newSheet = ThisWorkbook.Worksheets.Add(After:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count))
newSheet.Name = sheetName
End Sub
テンプレートシートをコピーして毎月分のシートを作る
「テンプレート」シートを元に、月ごとのシートを自動で複製したい場合は、既存シートのCopyメソッドを使います。
Sub CopyTemplateSheet()
Dim templateSheet As Worksheet
Set templateSheet = ThisWorkbook.Worksheets("テンプレート")
templateSheet.Copy After:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count)
Dim newSheet As Worksheet
Set newSheet = ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count)
newSheet.Name = Format(Date, "yyyy年mm月")
End Sub
Copyメソッドを実行すると、コピー先のシートがブック内で自動的にアクティブになります。そのため、コピー直後はWorksheets.Count番目(一番右)のシートが複製されたシートになります。この性質を利用して、複製したシートを変数に取得し名前を変更しています。
シートを別のブックにコピーする
集計結果のシートだけを別ブックとして切り出したい場合も、Copyメソッドが使えます。AfterやBeforeを省略すると、シートは新しいブックとしてコピーされます。
Sub CopySheetToNewWorkbook()
Dim sourceSheet As Worksheet
Set sourceSheet = ThisWorkbook.Worksheets("集計結果")
sourceSheet.Copy
' コピー直後にアクティブになった新規ブックを取得
Dim newBook As Workbook
Set newBook = ActiveWorkbook
newBook.SaveAs Filename:=ThisWorkbook.Path & "\集計結果_" & Format(Date, "yyyymmdd") & ".xlsx"
newBook.Close SaveChanges:=False
End Sub
Copyの引数を省略すると新規ブックが作成されてアクティブになるため、ActiveWorkbookでその新規ブックを取得し、任意のファイル名で保存しています。
シートの並び順を入れ替える:Moveメソッド
シートの表示順を整理したいときはMoveメソッドを使います。Copyと同じくBefore・After引数で移動先を指定します。
Sub MoveSheetToFirst()
ThisWorkbook.Worksheets("目次").Move Before:=ThisWorkbook.Worksheets(1)
End Sub
「目次」シートを常に一番左に配置したい場合など、ブックを開くたびに順序を整えたいケースで役立ちます。
複数シートをまとめて並び替える
シート名の一覧をもとに、指定した順番でまとめて並び替えることもできます。
Sub ReorderSheets()
Dim sheetOrder As Variant
sheetOrder = Array("目次", "4月", "5月", "6月", "集計")
Dim i As Long
For i = LBound(sheetOrder) To UBound(sheetOrder)
ThisWorkbook.Worksheets(sheetOrder(i)).Move After:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count)
Next i
End Sub
配列に定義した順番で、対象シートを1つずつ「一番右」へ移動させることで、最終的に配列と同じ並び順になります。シート数が多いブックの整理に便利な方法です。
まとめ
Worksheets.Add・Copy・Moveメソッドを使えば、シートの追加・複製・並び替えといった定型作業を自動化できます。
Addメソッドで新規シートを追加し、Nameプロパティで名前を設定するCopyメソッドは同一ブック内の複製にも、別ブックへの切り出しにも使えるCopy実行直後はコピー先が自動的にアクティブになる性質を利用するMoveメソッドで並び順を整理でき、配列と組み合わせれば一括並び替えも可能
毎月・毎週発生するシート作成やファイル分割の作業をマクロ化して、繰り返し作業の時間を減らしていきましょう。


コメント