ワークシートを挿入するときは、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