VBAで集計結果を出力したり、作業用の一時的なシートを作成したりと、マクロの実行中に新しいワークシートを追加したい場面は頻繁にあります。
Worksheets.Add
メソッドを使えば簡単にシートを追加できますが、その名前を変更したり、ブックの特定の位置(先頭や末尾など)に追加したりする方法も知っておくと、より高度な操作が可能になります。
この記事では、新しいシートを追加するための基本から、挿入位置を自在にコントロールする応用テクニックまでを解説します。
基本的なシートの追加と命名
まず、新しいシートを追加し、そのシートに名前を付ける基本的な方法です。ここでのポイントは、追加したシートをオブジェクト変数に格納することです。
完成したVBAコード
Sub AddAndNameNewSheet()
' Worksheetオブジェクトを格納する変数を宣言します
Dim newSheet As Worksheet
' 新しいワークシートを追加し、そのオブジェクトを変数に格納します
' これにより、今追加したシートを確実に操作できます
Set newSheet = ThisWorkbook.Worksheets.Add
' オブジェクト変数経由で、新しいシートの名前を変更します
newSheet.Name = "VBA作成レポート"
MsgBox "「" & newSheet.Name & "」という名前のシートを追加しました。"
End Sub
コードのポイント解説
Set newSheet = Worksheets.Add
:Worksheets.Add
は、新しいシートを追加すると同時に、追加されたWorksheet
オブジェクトそのものを返します。これをSet
を使って変数(newSheet
)に格納することで、その後のコードで「たった今追加したシート」を正確に参照できます。newSheet.Name = "..."
: オブジェクト変数を使えば、ActiveSheet.Name
のように曖昧な指定をせずとも、newSheet
という名前で直接、かつ安全にプロパティ(ここでは名前)を変更できます。
シートを追加する位置を指定する方法
Worksheets.Add
メソッドには、Before
またはAfter
という引数を指定することで、シートを挿入する位置を自由にコントロールできます。
Before
引数:指定したシートの前に挿入
指定したシートの左隣に、新しいシートが追加されます。
Sub AddSheetBefore()
' 「Sheet1」の前に新しいシートを追加
Worksheets.Add Before:=Worksheets("Sheet1")
End Sub
After
引数:指定したシートの後に挿入
指定したシートの右隣に、新しいシートが追加されます。
Sub AddSheetAfter()
' 「Sheet1」の後に新しいシートを追加
Worksheets.Add After:=Worksheets("Sheet1")
End Sub
【応用】ブックの一番最後にシートを追加する
実務で最もよく使われるのが、「ブックの一番右端(末尾)にシートを追加する」という処理です。これはAfter
引数とWorksheets.Count
(シートの総数)を組み合わせることで実現できます。
Sub AddSheetToEnd()
Dim lastSheet As Worksheet
Dim newReportSheet As Worksheet
' 現在のブックの最後のシートを取得
Set lastSheet = ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count)
' 最後のシートの後ろに、新しいシートを追加
Set newReportSheet = ThisWorkbook.Worksheets.Add(After:=lastSheet)
newReportSheet.Name = "最終レポート"
MsgBox "ブックの末尾に「" & newReportSheet.Name & "」シートを追加しました。"
End Sub
Worksheets(Worksheets.Count)
でブックの最後のシートを特定し、そのAfter
(後ろ)に新しいシートを追加しています。
まとめ
VBAで新しいシートを追加する際の基本と応用は、以下の通りです。
- 基本:
Set mySheet = Worksheets.Add
で、追加したシートを変数に格納する。 - 位置指定:
Before
またはAfter
引数を使う。Worksheets.Add Before:=Worksheets("既存のシート名")
Worksheets.Add After:=Worksheets("既存のシート名")
- 末尾に追加:
Worksheets.Add After:=Worksheets(Worksheets.Count)
これらのテクニックをマスターすれば、レポートの自動生成など、マクロでできることの幅が大きく広がります。