【Excel VBA】新しいシートを追加する方法|Worksheets.Addの使い方と命名・末尾追加も解説

はじめに

こんにちは、管理人のりゅうです。
今回は、シートの追加方法について解説していきます。

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)

引数

#引数必須説明
1BeforeWorksheetオブジェクトを指定します。
指定したシートの前(左側)の位置に新規にシートを作成します。
2AfterWorksheetオブジェクトを指定します。
指定したシートの後ろ(右側)の位置に新規にシートを作成します。
3Count作成するシート数を数値で指定します。
Addメソッド – 引数
りゅう

引数はすべて任意で、何も指定しない場合は「アクティブシートの前(左側)」に新規シートが追加されます。
また、名前は「Sheet」 + 連番の名前で命名されます。

BeforeとAfter引数について、両者ともにシートの位置を指定する関係上、両方同時に指定することはできません。

戻り値

新規に追加されたWorksheetオブジェクトを返却します。

使用における注意点

シートの追加位置について

シートの追加位置を指定しない場合は、「アクティブシート」の前(左側)に追加されるため、気づかない位置にシートが追加されることがあります。

サンプルコードの 先頭・末尾にシートを追加するや、特定シートの前後にシートを追加するなどを参考に、位置を指定することをお勧めします。

シート名を命名時にエラーとなる場合がある

シート名を命名して追加する場合、以下の場合にエラーとなる可能性があります。

  • 既に同名のシートが存在する場合
  • 31文字を超えるシート名を指定した場合
  • 禁止文字(/:*?[] など)を指定した場合

シートの存在チェックなどを実施するようにして、エラーを回避しましょう。
シート名の存在チェックはこちらに詳細を記載しています。

シートの後続操作について

Worksheets.Addで追加した後に、追加したシートを操作したい場合、挿入位置やシート名を明示的に指定しないと、ソースコード上でシートの選択が困難になります。

追加したシートにデータを出力する場合など、後続操作を実施する場合、シートを変数に格納しておくと便利です。
サンプルコード シートを追加した後に変数に格納するを参考にしてください。

シート追加後のActiveSheetについて

シートを追加すると、追加されたシートがActiveとなります。
従って、「ActiveSheet」などを利用している場合に、予期せず追加されたシートを参照してしまう場合があります。
ActiveSheetは極力避けるようコーディングをするのがオススメです。

ActiveSheetの危険性については、ActivateSheetの危険性についてにて解説しているので、一読いただくのをオススメします。

まとめ

今回は、シートを追加する方法についてまとめました。
Worksheet.Addは簡単に見えて、「挿入位置」「名前」「変数化」をしっかり理解して利用しないと、予期せぬ不具合を埋め込む原因になります。
使用における注意点を一読いただき、注意してコーディングするようにしましょう!

関連記事はこちら

オススメの書籍

Excel 2019/2016/2013 VBAプログラミング実践 (よくわかる)

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

(サンプルファイル・無料電子版付)できる大事典 Excel VBA 2019/2016/2013&Microsoft 365

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

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

大手外資系コンサルティングファーム勤務。ExcelVBA歴は8年。金融関係のプロジェクトにて約100万レコードを処理するマクロの開発実績あり。ExcelVBAの基礎・応用情報を発信中。

コメント

コメントする

CAPTCHA