Excel VBAでシートを追加する方法
今回の目標
「シートを追加できない?」や「追加するシートの位置を一番左や一番右にできない?」と思ったあなたへ。
この記事では、シートを追加する方法や、追加時に変数に代入する方法、追加する位置等を丁寧に解説します!
実務で使える具体例つきです。
目標リスト
- シートを追加できるようになる
- シートを追加する位置を指定できるようになる
- 別のブックのシートを追加できるようになる
説明
シートの追加とは
Excelでは、マクロでシートを追加できます。
追加したシートをオブジェクト変数に代入したり、一番左のシートに追加するなどの位置の指定、複数シートの追加が出来ます。
Worksheets.Addと引数一覧
シートを追加するには、「Worksheets」オブジェクトの『Add』メソッドを使用します。
追加されるシートの位置を引数で指定しない場合、アクティブなシートの1つ左です。
シート名は「SheetNum」となります(Numは最も小さい未使用の正数が入ります)。
Addメソッドの構文
Add(Before, After, Count, Type)
Addメソッドの引数一覧
引数 | 省略 | 説明 |
---|---|---|
Before | 可能 | シートオブジェクトを指定する。指定したシートの1つ左に、シートを追加する。 |
After | 可能 | シートオブジェクトを指定する。指定したシートの1つ右に、シートを追加する。 |
Count | 可能 | シートを何枚追加するか。省略時はアクティブなシートの枚数を追加する。 |
Type | 可能 | 追加するシートの種類を指定する。 |
※ Before と After を同時に指定すると、実行時エラーが発生します。
Microsoft社のリファレンス【Sheets.Add メソッド】を参照しています。
【Microsoft公式】Sheets.Add メソッド (Excel)
シンプルにシートを追加する
1.シートを追加する
Addメソッドを使用すると、新しいシートを追加できます。
デフォルトの設定は、シート名が「SheetNum」※、アクティブなシートの1つ左に追加されます。
※ シート名の"Num"は最も小さい未使用の正数が入ります。
サンプルコード
Sub SampleSheetAdd1_1()
'シートを追加する
Worksheets.Add
End Sub
● 実行前
● 実行後
2.シートの追加と同時に変数に代入する
シートを追加するとき、そのシートを変数に代入できます。
シートを追加後に、シート名やシートのデータを変更する場合、Setステートメントを使用して変数に代入しましょう。
サンプルコード
Sub SampleSheetAdd1_2()
Dim ws As Worksheet
'追加するシートのオブジェクトを変数に格納する
Set ws = Worksheets.Add
End Sub
● 実行前
● 実行後
3.別のブックにシートを追加する
マクロを実行しているブックとは別のブックにシートを追加したい場合は、ブックオブジェクトを指定したうえで、シートを追加しましょう。
サンプルコード
Sub SampleSheetAdd1_3()
Dim wbName As String
Dim ws As Worksheet
'シートを追加するブック名
wbName = "Book2.xlsx"
'追加するシートのオブジェクトを変数に格納する
Set ws = Workbooks(wbName).Worksheets.Add
End Sub
● 実行前
● 実行後
シートの追加時にシート名をつける
1.シートの追加時にシート名をつける
シートを追加すると同時に、シート名を付けることができます。
Nameプロパティ を使用することで、シート名を付けることができます。
「Add.Name = "シート名"」としましょう。
サンプルコード
Sub SampleSheetAdd2_1()
' "新規シート" という名前のシートを追加する
Worksheets.Add.Name = "新規シート"
End Sub
● 実行前
● 実行後
2.シートの追加と変数に代入、名前の変更
シートの追加時、シートの名前を付ける方法です。
追加するシートのオブジェクトを変数に代入し、
その後に Nameプロパティ で、名前を変更します。
なお、シートのオブジェクトの代入とシート名を付けることは1ステップで完結させることが出来ません。
※例えば「Set ws = Worksheets.Add.Name = "新規シート"」のように書くことができません。
サンプルコード
Sub SampleSheetAdd2_2()
Dim newSheet As Worksheet
' 追加するシートのオブジェクトを変数に格納する
Set newSheet = Worksheets.Add
' 追加したシートの名前を "新規シート" に変更する
newSheet.Name = "新規シート"
End Sub
● 実行前
● 実行後
シートを追加するシートの位置を指定する
1."Sheet1"の1つ左(前)にシートを追加する
特定のシートの1つ左(前)にシートを追加する方法です。 今回のサンプルでは、「Sheet1」の1つ左にシートを追加します。 Before 引数に "Sheet1" を指定することで実現できます。
サンプルコード
Sub SampleSheetAdd3_1()
' "Sheet1" の1つ左(前)に新しいシートを追加
Worksheets.Add before:=Worksheets("Sheet1")
End Sub
● 実行前
● 実行後
2."Sheet1"の1つ右(後ろ)にシートを追加する
特定のシートの1つ右(後ろ)にシートを追加する方法です。 今回のサンプルでは「Sheet1」の右隣に新しいシートを追加します。 After 引数に "Sheet1" を指定することで実現できます。
サンプルコード
Sub SampleSheetAdd3_2()
' "Sheet1" の1つ右(後ろ)に新しいシートを追加
Worksheets.Add After:=Worksheets("Sheet1")
End Sub
● 実行前
● 実行後
3.ブックの一番左(先頭)にシートを追加する
ブックの一番左(先頭)にシートを追加する方法です。
「Worksheets(1)」と書くことで、ブックの一番左(先頭)のシートを指します。
なお、「Worksheets(2)」と書くと、ブックの左から二番目のシートを指します。
サンプルコード
Sub SampleSheetAdd3_3()
' ブックの一番左(先頭)に新しいシートを追加
Worksheets.Add Before:=Worksheets(1)
End Sub
● 実行前
● 実行後
4.ブックの一番右(最後尾)にシートを追加する
ブックの一番右(最後尾)にシートを追加する方法です。 「Worksheets.Count」は、ブックに存在するシートの枚数を返します。 「Worksheets(Worksheets.Count)」とすることで、最後尾のシートオブジェクトを指すことができます。
サンプルコード
Sub SampleSheetAdd3_4()
' ブックの一番右(後ろ)に新しいシートを追加
Worksheets.Add After:=Worksheets(Worksheets.Count)
End Sub
● 実行前
● 実行後
5.ブックの一番左(先頭)にシート名を付けて追加する
ブックの一番左(先頭)にシートを追加しつつ、シート名をつける方法です。 Sheets.Add メソッドの Before 引数と Name プロパティを組み合わせることで、1行で完結させることができます。
サンプルコード
Sub SampleSheetAdd3_5()
' ブックの一番左(前)に "新規シート" という名前のシートを追加
Worksheets.Add(before:=Worksheets(1)).Name = "新規シート"
End Sub
● 実行前
● 実行後
複数のシートを追加する
1.シート2枚を追加
1行で2枚のシートを追加するには、引数 Count を 2 で指定します。 なお、Before や After を指定することで挿入位置を変えることもできます。
サンプルコード
Sub SampleSheetAdd4_1()
'シートを2枚追加する
Worksheets.Add Count:=2
End Sub
● 実行前
● 実行後
2.シート2枚を変数に代入、シート名をつける
1行で2枚のシートを追加した場合、Sheets.Add が返すのは最初のシートだけです。 そのため、2枚目のシートは「追加した1枚目の1つ右隣りのシート」を指定して操作する必要があります。
サンプルコード
Sub SampleSheetAdd4_2()
Dim newSheet1 As Worksheet
Dim newSheet2 As Worksheet
' シートを2枚追加する。
' 1枚目のシートオブジェクトが変数に代入される
Set newSheet1 = Worksheets.Add(Count:=2)
'1枚目のシート名を設定する
newSheet1.Name = "新規シート1"
' 2枚目は Worksheets(newSheet1.Index + 1) で参照する
Set newSheet2 = Worksheets(newSheet1.Index + 1)
'2枚目のシート名を設定する
newSheet2.Name = "新規シート2"
End Sub
● 実行前
● 実行後