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
【実行サンプル】

● 実行前
プログラム実行前の画像

● 実行後
プログラム実行後の画像

関連リンク

ページの先頭へ