こんにちは、管理人のりゅうです。
今回は、シートの追加方法について解説していきます。
Excel VBAで「新しいシートを追加したい」「特定の位置に挿入したい」「作成と同時に名前を付けたい」そんなときに使うのが「Worksheets.Add」です。
この記事、「最短の書き方」「便利な応用」「基礎構文」「使用における注意点」の順に解説します。
- 「ブックにシートを追加する方法」だけでなく、「特定の位置にシートを挿入する方法」「作成と同時に名前を付ける方法」など、細かい情報も解説しています。
- 基礎構文や、引数指定時の注意点についても詳しく解説しています。
- Excel VBAで新しいシートを追加する方法|Worksheets.Addの使い方と命名・末尾追加も解説
- コピペで使える実践的なサンプルコードを掲載しています。
シートを追加するソースコード
シートを追加するには、「Worksheets.Add」を使用します。
以下のコードを貼り付けて実行すれば、新しいシートが1枚追加されます。
Public Sub AddSheet()
' 新規シートの追加
ThisWorkbook.Worksheets.Add
End Sub
よく使う応用パターン
先頭・末尾に追加する
ブックの先頭にシートを追加する
Public Sub AddSheet()
' ブックの先頭にシートを追加する
ThisWorkbook.Worksheets.Add Before:=ThisWorkbook.Worksheets(1)
End Sub
ブックの末尾にシートを追加する
Public Sub AddSheet()
' ブックの末尾にシートを追加する
ThisWorkbook.Worksheets.Add After:=ThisWorkbook.Worksheets(Worksheets.Count)
End Sub
特定シートの前後にシートを追加する
指定したシートの前(左側)にシートを追加する
Beforeプロパティにシートを指定すると、指定したシートの前(左側)にシートが追加されます。
Public Sub AddSheet()
' Sheet1の前(左側)にシートを追加する
ThisWorkbook.Worksheets.Add Before:=ThisWorkbook.Worksheets("Sheet1")
End Sub
指定したシートの後ろ(右側)にシートを追加する
Afterプロパティにシートを指定すると、指定したシートの後ろ(右側)にシートが追加されます。
Public Sub AddSheet()
' Sheet1の後ろ(右側)にシートを追加する
ThisWorkbook.Worksheets.Add After:=ThisWorkbook.Worksheets("Sheet1")
End Sub
名前を付けてシートを追加する
以下のコードでは、「Summary」という名前のシートを追加します。
Public Sub AddSheet()
' Summaryという名前のシートを追加する
Worksheets.Add.Name = "Summary"
End Sub
シートを追加した後に変数に格納する
シートを変数に格納することで、「ThisWorkbook.Worksheets(“Sheet1”)」のように、毎回指定せずに済みますのでオススメです。
Public Function AddSheet() As Worksheet
Dim wsObj As Worksheet
' ブックの末尾にシートを追加した後、変数に格納する
Set wsObj = ThisWorkbook.Worksheets.Add(After:=ThisWorkbook.Worksheets(Worksheets.Count))
' 戻り値として返却
Set AddSheet = wsObj
End Function
シートを追加し重複の無いシート名を命名する
シートの存在チェックのロジックと併用することで、重複が無い名前でシートを作成します。
以下のソースコードでは、「Summary」というシートを作成しますが、重複するシートがある場合は「Summary(1)」のように、連番を振り作成します。
Public Sub AddSheet()
Dim ws As Worksheet
Dim baseName As String: baseName = "Summary"
Dim sheetName As String: sheetName = baseName
Dim i As Long: i = 1
' 重複するシートの存在チェック
Do While SheetExists(sheetName)
' 存在しない名前の場合は、変数に値をセットしループ終了
sheetName = baseName & "(" & i & ")"
i = i + 1
Loop
' 重複が無い名前で命名し、シート追加
Set ws = Worksheets.Add(After:=Worksheets(Worksheets.Count))
ws.Name = sheetName
End Sub
Private Function SheetExists(sheetName As String) As Boolean
On Error Resume Next
' シートの存在チェック
SheetExists = Not Worksheets(sheetName) Is Nothing
On Error GoTo 0
End Function
Worksheets.Addの詳細情報
基本構文
ブックにシートを追加するには、WorksheetsコレクションのAddメソッドを使用します。
Worksheets.Add(Before, After, Count)
引数
# | 引数 | 必須 | 説明 |
---|---|---|---|
1 | Before | Worksheetオブジェクトを指定します。 指定したシートの前(左側)の位置に新規にシートを作成します。 | |
2 | After | Worksheetオブジェクトを指定します。 指定したシートの後ろ(右側)の位置に新規にシートを作成します。 | |
3 | Count | 作成するシート数を数値で指定します。 |

引数はすべて任意で、何も指定しない場合は「アクティブシートの前(左側)」に新規シートが追加されます。
また、名前は「Sheet」 + 連番の名前で命名されます。
BeforeとAfter引数について、両者ともにシートの位置を指定する関係上、両方同時に指定することはできません。
戻り値
新規に追加されたWorksheetオブジェクトを返却します。
使用における注意点
シートの追加位置について
シートの追加位置を指定しない場合は、「アクティブシート」の前(左側)に追加されるため、気づかない位置にシートが追加されることがあります。
サンプルコードの 先頭・末尾にシートを追加するや、特定シートの前後にシートを追加するなどを参考に、位置を指定することをお勧めします。
シート名を命名時にエラーとなる場合がある
シート名を命名して追加する場合、以下の場合にエラーとなる可能性があります。
- 既に同名のシートが存在する場合
- 31文字を超えるシート名を指定した場合
- 禁止文字(/:*?[] など)を指定した場合
シートの存在チェックなどを実施するようにして、エラーを回避しましょう。
シート名の存在チェックはこちらに詳細を記載しています。
シートの後続操作について
Worksheets.Addで追加した後に、追加したシートを操作したい場合、挿入位置やシート名を明示的に指定しないと、ソースコード上でシートの選択が困難になります。
追加したシートにデータを出力する場合など、後続操作を実施する場合、シートを変数に格納しておくと便利です。
サンプルコード シートを追加した後に変数に格納するを参考にしてください。
シート追加後のActiveSheetについて
シートを追加すると、追加されたシートがActiveとなります。
従って、「ActiveSheet」などを利用している場合に、予期せず追加されたシートを参照してしまう場合があります。
ActiveSheetは極力避けるようコーディングをするのがオススメです。
ActiveSheetの危険性については、ActivateSheetの危険性についてにて解説しているので、一読いただくのをオススメします。
まとめ
今回は、シートを追加する方法についてまとめました。
Worksheet.Addは簡単に見えて、「挿入位置」「名前」「変数化」をしっかり理解して利用しないと、予期せぬ不具合を埋め込む原因になります。
使用における注意点を一読いただき、注意してコーディングするようにしましょう!
関連記事はこちら
- 【Excel VBA】シートの選択(Selectメソッド)
- 【Excel VBA】シートの存在チェック(同名シートの存在チェック)
- 【Excel VBA】シートの移動(Moveメソッド)
- 【Excel VBA】シートの色変更(Colorプロパティ)
- 【Excel VBA】シートの保護(Protect)
- 【Excel VBA】シートの削除(Worksheets.Delete)
オススメの書籍

Excel VBAを始めてみたばかりの方へオススメです!
本記事のような具体的なコードも大事ですが、Excel VBA全体の流れを体系的に学べる書籍が 1冊あると理解が一気に進みます。

本のタイトルの通りで、まさに辞典のように何でも載っています。
メジャーなサンプルコードからマイナーなものまで載っていて、パラパラめくるだけでも楽しいです。
約1,000ページもあるので重いですが、購入すると電子版も付いてくるのでオススメです!
コメント