機能と数式 | VBA | セミナー | オンラインソフト | お問い合わせ | その他
Top > Excel > VBA > シートの操作

新しいシートを挿入する



シートの挿入は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の基本ルールです。

これを応用すると、挿入されたシートを変数に格納するのではなく、Withステートメントでくくることもできます。次のコードはSample03_4と同じ働きをします。

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

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

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



このエントリーをはてなブックマークに追加