エクセルVBAで使用するコードの備忘録。VBAでワークシートを追加するコード。全シートの一番最後に追加する場合についてもご紹介。ワークシートを削除する場合のコードについてはこちらをご参照ください。
Worksheets.Addメソッド
ワークシートを追加するには「Workbook」オブジェクト下の「Worksheets」オブジェクトに対してAddメソッドを使用します。
Call ThisWorkbook.Worksheets.Add
Addメソッドには引数を指定することができますが、どれも任意です。
引数名 | タイプ | 説明 |
Before | Variant | 指定シートの直前に追加する |
After | Variant | 指定シートの直後に追加する |
Count | Variant | 追加するシートの枚数 |
Type | Variant | 追加するシートのタイプ |
使用する頻度が高いのはBefore、After、Countです。あまりないかもしれませんが、BeforeとAfterに矛盾するような条件を指定するとエラーになります。
ちなみに戻り値として追加したワークシートオブジェクトが返されます。複数のワークシートを追加下場合は一番最後に追加されたワークシートが返されます。
サンプルコード
いくつかサンプルコードをご紹介したいと思います。まず一つ目は、指定したシートの直前(Before)にシートを追加します。一応変数としてCountを入れたコードをご紹介していますが、追加枚数が1枚の場合は省略可能です。
なお、コードを使用する際はカッコに囲まれた部分([***])を自分のプログラムに合わせて変更してください。
指定シートの直前に新規シートを追加する
Public Sub AddWorksheet1()
'--- 追加位置のワークシート ---'
Dim wsBefore As Worksheet
Set wsBefore = ThisWorkbook.Worksheets("[シート名]")
'--- 追加したワークシートを格納する変数 ---'
Dim wsTmp As Worksheet
Set wsTmp = ThisWorkbook.Worksheets.Add(Before:=wsBefore, Count:=[追加枚数])
End Sub
全シートの一番初めに新規シートを追加する
次は全シートの一番初めにワークシートを追加する場合です。この場合は挿入位置を指定する必要はありません。
Public Sub AddWorksheet2()
'--- 追加したワークシートを格納する変数 ---'
Dim wsTmp As Worksheet
Set wsTmp = ThisWorkbook.Worksheets.Add(Count:=[追加枚数])
End Sub
全シートの一番最後に新規シートを追加する
全シートの一番最後に新規シートを追加するには、挿入場所を指定するために一番最後のシートをまず取得する必要があります。これにはワークシートの枚数を取得してインデックス番号で挿入位置のワークシートを取得してやればOKです。
Public Sub AddWorksheet3()
'--- ワークシートの枚数 ---'
Dim n As Long
n = ThisWorkbook.Worksheets.Count
'--- 追加位置のワークシート ---'
Dim wsAfter As Worksheet
Set wsAfter = ThisWorkbook.Worksheets(n)
'--- 追加したワークシートを格納する変数 ---'
Dim wsTmp As Worksheet
Set wsTmp = ThisWorkbook.Worksheets.Add(After:=wsAfter, Count:=[追加枚数])
End Sub