Sheets.Addメソッド、Worksheets.Addメソッド
ブックへの新規シートの追加はWorksheetsコレクションまたはSheetsコレクションに対してAddメソッドで行います。
SheetsとWorksheetsの違いは、Sheetsコレクションはワークシート、グラフシート、マクロシート、ダイアログシートの4種類全てのシートを対象としますが、Worksheetsプロパティはワークシートのみを対象とする点です。
SheetsとWorksheetsの違いの詳細は「VBAのSheetsとWorksheetsの違い」をご参照ください。
Addメソッドの仕様
Addメソッドの各種パラメータを設定することで、新規シートの追加はシートの一番左や一番右や途中など、任意の部分に対して追加することが出来ます。
追加時にいくつかの特有の動作があります。
- 引数を全て省略時は新規シートはアクティブシートの左に追加されます。
- シート名は自動的に設定されます。
- 追加シートが自動的にアクティブになります。
- 追加する直前に選択されていたシートの選択状態は解除されます。複数シートを選択していた場合も同様です。
- 新規シートは追加と同時にシート名を設定することが可能です。
これらの中で追加シートが自動的にアクティブになることについて余計なおせっかいと感じることがある場合がありますが、仕様ですので工夫するしかありません。
構文
Function Sheets.Add([Before As Worksheet], [After As Worksheet], [Count], [Type As XlSheetType]) As Object
Function Worksheets.Add([Before As Worksheet], [After As Worksheet], [Count], [Type As XlSheetType]) As Object
Worksheets | 親オブジェクトとしてWorksheetsコレクションを指定します。 |
Before | 省略可。Beforeでワークシートを指定すると、その左に新規ワークシートが追加されます。
BeforeとAfterを同時に設定することは出来ません。設定した場合はエラーになります。 |
After | 省略可。Afterでワークシートを指定すると、その右に新規ワークシートが追加されます。
BeforeとAfterを同時に設定することは出来ません。設定した場合はエラーになります。 |
Count | 省略可。追加するワークシートの数を指定します。
省略時は1になります。2以上を指定した場合は左側に追加数分シートが増えます。 |
Type | 省略可。追加するワークシートの種類をXlSheetType列挙型で指定します。 |
戻り値 | 追加したシートのオブジェクトが返されます。
引数Typeによって追加するシートの種類が異なるため、戻り値もそれに合わせて内部処理形式の型が変わります。 内部処理形式の型は、ワークシートとマクロシートを追加した場合はWorksheetオブジェクト、グラフシートを追加した場合はChartオブジェクト、ダイアログシートを追加した場合はDialogSheetオブジェクトが返却されます。 |
XlSheetType列挙型
定数 | 値 | 内容 |
---|---|---|
xlChart | -4109 | グラフシート |
xlDialogSheet | -4116 | ダイアログシート |
xlExcel4IntlMacroSheet | 4 | マクロシート |
xlExcel4MacroSheet | 3 | マクロシート |
xlWorksheet | -4167 | ワークシート(既定) |
サンプルコード
基本的な書き方は以下のようなパターンになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
Sub SheetAddBaseTest() '// Callステートメント省略+引数未設定 Worksheets.Add '// Callステートメント省略+引数設定 Worksheets.Add Before:=Sheets(1) Worksheets.Add After:=Sheets(1), Count:=2 '// Callステートメントあり+引数未設定 Call Worksheets.Add '// Callステートメントあり+引数設定 Call Worksheets.Add(Before:=Sheets(1)) End Sub |
どこにどのように追加するかの詳細については以下のサンプルになります。
1. 一番左に追加する方法
1 2 3 4 5 |
Sub SheetAddFirstTest() Dim sht As Worksheet Set sht = Worksheets.Add(Before:=Sheets(1)) End Sub |
追加前
追加後
2. 一番右に追加する方法
1 2 3 4 5 |
Sub SheetAddLastTest() Dim sht As Worksheet Set sht = Worksheets.Add(After:=Sheets(Sheets.Count)) End Sub |
追加前
追加後
3. 指定シートの左に追加する方法
1 2 3 4 5 |
Sub SheetAddSheetLeftTest() Dim sht As Worksheet Set sht = Worksheets.Add(Before:=ActiveSheet) End Sub |
追加前
追加後
4. 指定シートの右に追加する方法
1 2 3 4 5 |
Sub SheetAddSheetRightTest() Dim sht As Worksheet Set sht = Worksheets.Add(After:=ActiveSheet) End Sub |
追加前
追加後
5. グラフシートを3つ追加する方法
上の4つとは異なり、Addメソッドの戻り値用に変数の型をグラフシートを表すChart型にしています。
面倒な場合は型未指定でVariant型としても構いません。
1 2 3 4 5 |
Sub SheetAddSheetGraphTest() Dim sht As Chart Set sht = Sheets.Add(Count:=3, Type:=xlChart) End Sub |
追加前
追加後
6. 追加時にシート名を変更する方法
上に挙げたコードはいずれもAddメソッドの戻り値を取得していましたが使っていませんでした。
シート名を設定する場合にはこのシートオブジェクトのNameプロパティに新しいシート名を設定します。
Excelの仕様と同様で、既に存在するシート名や31文字を超えるシート名やシート名に設定できない文字「: \ / ? * [ ] 」を設定した場合はエラーになります。
1 2 3 4 5 6 |
Sub SheetAddNewNameTest() Dim sht As Worksheet Set sht = Worksheets.Add(Before:=Sheets(1)) sht.Name = "追加シート" End Sub |
追加前
追加後