新しいシートを挿入する


シートの挿入はAddメソッド

ワークシートを挿入するときは、WorksheetsコレクションのAddメソッドを実行します。次のコードは新しいワークシートを1枚挿入します。

Sub Sample03()
    Worksheets.Add
End Sub

Addメソッドの構文は次の通りです。

Worksheets.Add(Before, After, Count, Type)

引数Beforeに"Sheet2"を指定すると、新しいシートは[Sheet2]の手前(Before)に挿入されます。逆に、指定したシートの後ろ(After)に挿入したいときは、引数Afterにシート名を指定します。引数Beforeと引数Afterは、どちらか一方だけを指定します。もし両方指定した場合、その位置が矛盾しているとAddメソッドはエラーになります。まぁ、普通は両方同時に指定しませんけどね(^^;

引数Countは挿入するシートの枚数を指定します。引数Typeは挿入するシートの種類を指定します。どちらの引数も、あまり使いません。この後で解説しますが、一般的にシートを挿入する場合、挿入したシートに対して何らかの処理を行います。そのとき、挿入されたシートを特定する方法がポイントになります。引数Countを指定して複数のシートを同時に挿入すると、挿入されたシートを特定することが面倒になるからです。複数のシートを挿入したいときは、Addメソッドを複数回実行する方が直感的です。引数Typeを使えばグラフシートやExcel 4.0のマクロシートなども挿入できます。

最もよくあるケースの1つとして、現在あるワークシートの最後尾に新しいワークシートを挿入するコードをご紹介します。

Sub Sample03_2()
    Worksheets.Add after:=Worksheets(Worksheets.Count)
End Sub

挿入されたシートを特定する

Addメソッドで挿入されるシートには、[Sheet4][Sheet5]などExcelが便宜的な名前を付けます。これはShiftキーとF11キーを押して新しいワークシートを挿入したときと同様です。では、[田中]という名前のワークシートを挿入したいときはどうしたらいいでしょう。それには、まず新しいワークシートを挿入して、次に挿入されたシートの名前を「田中」に変更しなければなりません。ここで重要なことは、挿入されたシートをどうやって特定するかということです。

2つの方法があります。Addメソッドが新しいワークシートを挿入すると、挿入されたワークシートがアクティブシートになります。この特性を利用して、アクティブシートの名前を変更してみましょう。

Sub Sample03_3()
    Worksheets.Add
    ActiveSheet.Name = "田中"
End Sub

もちろん、このコードでも[田中]シートを挿入することはできますが、実は、Addメソッドは無事に新しいシートを挿入すると、挿入したシートを返すという特徴があります。これを利用するのが2番目の方法です。

Sub Sample03_4()
    Dim NewWorkSheet As Worksheet
    Set NewWorkSheet = Worksheets.Add()
    NewWorkSheet.Name = "田中"
End Sub

Sample03_4は、ワークシート型の変数NewWorkSheetに、Addメソッドの返り値を格納しています。ここで注意しなければならないのは、Addメソッドの返り値はWorksheetオブジェクトだということです。挿入したシートの名前を文字列で返すのではありません。挿入したシート自体を返すのです。したがって、返り値を受け取る変数はワークシート型かバリアント型を指定しなければなりません。

もうひとつ。2行目のAddメソッドに空の括弧が付いている点にも留意してください。返り値を利用する場合は、括弧を付けなければならないというのがVBAの基本ルールです。

これを応用すると、挿入されたシートの名前を直接設定することもできます。次のコードはSample03_4と同じ働きをします。

Sub Sample03_5()
    Worksheets.Add.Name = "田中"
    End With
End Sub

さて、最後にもうひとつよくあるケースを。新しいシートを挿入しても、現在のアクティブシートを変更しない方法をご紹介します。仕組みは簡単。Addメソッドで挿入する前に、現在のアクティブシートを記憶しておけばいいのです。そして、挿入後にアクティブシートを戻します。

Sub Sample03_6()
    Dim OldSheet As Worksheet
    Set OldSheet = ActiveSheet
    Worksheets.Add
    OldSheet.Activate
End Sub