【Excel VBA】シートを追加する(Add)

はじめに

今回は、ブックにシートを新規に追加(作成)する方法について解説します。
具体的なサンプルコードについても掲載していますので、ぜひ最後までお付き合いください!

この記事を読むメリット
  • ブックにシートを追加する方法が分かります。
  • 基礎構文や、引数指定時の注意点についても詳しく解説しています。
  • コピペで使える実践的なサンプルコードを掲載しています。
  • シート追加とシート名変更を同時に実施するコードも掲載しています。

基本情報

Addメソッド

シートを追加するには、WorksheetsコレクションのAddメソッドを使用します。

構文

Worksheets.Add(Before, After, Count)

引数

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

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

戻り値

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

りゅう

シートを追加したら、変数に格納するのがオススメです。
サンプルコード – シートを追加した後に変数に格納する を参考としてください!

めい

なお、シート名についてはExcelにて自動で命名されてしまいます。
目的の名前に変更する場合、以下記事を参考としてください。

サンプルコード

指定したシートの前(左側)にシートを追加する

追加するシートの位置を指定する方法です。
以下では、指定したシートの前(左側)に追加します。

サンプルコード
' Sheet1の前(左側)にシートを追加する
ThisWorkbook.Worksheets.Add Before:=ThisWorkbook.Worksheets("Sheet1")

指定したシートの後ろ(右側)にシートを追加する

追加するシートの位置を指定する方法です。
以下では、指定したシートの後ろ(右側)に追加します。

サンプルコード
' Sheet1の後ろ(右側)にシートを追加する
ThisWorkbook.Worksheets.Add After:=ThisWorkbook.Worksheets("Sheet1")

ブックの先頭にシートを追加する

追加するシートの位置を指定する方法です。
以下では、ブックの先頭に追加します。

サンプルコード
' ブックの先頭にシートを追加する
ThisWorkbook.Worksheets.Add Before:=ThisWorkbook.Worksheets(1)

ブックの末尾にシートを追加する

追加するシートの位置を指定する方法です。
以下では、ブックの末尾に追加します。

サンプルコード
' ブックの末尾にシートを追加する
ThisWorkbook.Worksheets.Add After:=ThisWorkbook.Worksheets(Worksheets.Count)

シートを追加した後に変数に格納する

追加するシートの位置を指定する方法です。
以下では、ブックの末尾に追加します。

サンプルコード
Dim wsObj As Worksheet

' ブックの末尾にシートを追加した後、変数に格納する
Set wsObj = ThisWorkbook.Worksheets.Add(After:=ThisWorkbook.Worksheets(Worksheets.Count))

指定した名前でシートを追加する

シートを追加するブックと、追加するシート名を指定することで、シートを作成するFunctionです。
ブック内で追加するシート名が既に使われていた場合は「シート名 (1)」のような形で重複が発生しない命名して作成します。

サンプルコード
Public Sub main()
    Dim wsObj As Worksheet

    ' マクロ実行ブック(ThisWorkbook)に、"新規シート"という名前でシートを追加する
    Set wsObj = createNewSheet(ThisWorkbook, "新規シート")
End Sub

'****************************************************************
'* メソッド名:新規シート生成
'*       引数:bookObj   … 作成対象ブックオブジェクト
'*             sheetName … 作成シート名
'*     戻り値:新規シート
' ****************************************************************
Public Function createNewSheet(ByVal bookObj As Workbook, ByVal sheetName As String) As Worksheet
    Dim cacheSheetName As String    ' シート名(連番付き)
    Dim loopCount As Integer        ' ループカウンタ
    Dim retSheetObj As Worksheet    ' Worksheetオブジェクト(返却用)

    cacheSheetName = sheetName
    loopCount = 1
    Do While True

        ' シートの存在チェック
        If checkExistSheetName(bookObj, cacheSheetName) Then

            ' シートが存在した場合 シート名の末尾に数字を追加
            cacheSheetName = sheetName & " (" & loopCount & ")"
        Else
            ' シートが存在しない場合はシート追加
            Set retSheetObj = bookObj.Worksheets.Add(after:=bookObj.Worksheets(bookObj.Worksheets.Count))

            ' シート名変更
            retSheetObj.Name = cacheSheetName

            ' 新規シートを返却
            Set createNewSheet = retSheetObj
            Set retSheetObj = Nothing
            Exit Function
        End If

        loopCount = loopCount + 1
    Loop

End Function

'****************************************************************
'* メソッド名:シート存在チェック
'*       引数:bookObj   … ブックオブジェクト
'*             sheetName … 作成シート名
'*     戻り値:存在チェック
' ****************************************************************
Private Function checkExistSheetName(ByVal bookObj As Workbook, ByVal sheetName As String) As Boolean

    Dim workSheetObj As Worksheet

    ' 戻り値に初期値として Falseをセット
    checkExistSheetName = False

    ' ブック内のシートをループ
    For Each workSheetObj In bookObj.Sheets

        If workSheetObj.Name = sheetName Then

            ' シート名が存在する場合 Trueを返却
            checkExistSheetName = True
        End If
    
    Next workSheetObj
End Function
めい

長いソースコードですが、コピペで使えますのでお試しください!

最後に

いかがでしたでしょうか。

個人的には、末尾にシートを追加することが多いので、サンプルコード – 指定した名前でシートを追加する にはお世話になっています…!

本記事が皆さんのお力になれば幸いです!

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

この記事を書いた人

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

コメント

コメントする

CAPTCHA