今回は、ブックにシートを新規に追加(作成)する方法について解説します。
具体的なサンプルコードについても掲載していますので、ぜひ最後までお付き合いください!
- ブックにシートを追加する方法が分かります。
- 基礎構文や、引数指定時の注意点についても詳しく解説しています。
- コピペで使える実践的なサンプルコードを掲載しています。
- シート追加とシート名変更を同時に実施するコードも掲載しています。
基本情報
Addメソッド
シートを追加するには、WorksheetsコレクションのAddメソッドを使用します。
Worksheets.Add(Before, After, Count)
引数
# | 引数 | 必須 | 説明 |
---|---|---|---|
1 | Before | Worksheetオブジェクトを指定します。 指定したシートの前(左側)の位置に新規にシートを作成します。 | |
2 | After | Worksheetオブジェクトを指定します。 指定したシートの後ろ(右側)の位置に新規にシートを作成します。 | |
3 | Count | 作成するシート数を数値で指定します。 |
BeforeとAfter引数について、両者ともにシートの位置を指定する関係上、両方同時に指定することはできません。
戻り値
新規に追加されたWorksheetオブジェクトを返却します。
![](https://vba-hack.com/wp-content/uploads/2022/10/02_ryu_zenshin_normal-cutout-150x150.png)
シートを追加したら、変数に格納するのがオススメです。
サンプルコード – シートを追加した後に変数に格納する を参考としてください!
![](https://vba-hack.com/wp-content/uploads/2022/10/02_may_zenshin_normal-cutout-150x150.png)
なお、シート名についてはExcelにて自動で命名されてしまいます。
目的の名前に変更する場合、以下記事を参考としてください。
![](https://vba-hack.com/wp-content/uploads/2022/10/thumbnail_sheet-name-change_1-300x158.png)
サンプルコード
指定したシートの前(左側)にシートを追加する
追加するシートの位置を指定する方法です。
以下では、指定したシートの前(左側)に追加します。
' 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
![](https://vba-hack.com/wp-content/uploads/2022/10/03_may_zenshin_point-cutout-150x150.png)
長いソースコードですが、コピペで使えますのでお試しください!
最後に
いかがでしたでしょうか。
個人的には、末尾にシートを追加することが多いので、サンプルコード – 指定した名前でシートを追加する にはお世話になっています…!
本記事が皆さんのお力になれば幸いです!
コメント