新しいワークシートを挿入するには、次のようにします。
Sub Sample1() Worksheets.Add End Sub
簡単ですね。実行すると、アクティブシートの左に、1枚の新しいワークシートが挿入されます。このAddメソッドには、次の引数があります。
引数Beforeや引数Afterを指定しないと、アクティブシートの左に挿入されます。引数Countを指定しないと、1枚のワークシートが挿入されます。したがって、引数を何も指定しないで
Sub Sample1() Worksheets.Add End Sub
のように実行すると、アクティブシートの左に、1枚の新しいワークシートが挿入されます。ということは、上記のSample1は、下記Sample2と同じ意味になります。
Sub Sample2() Worksheets.Add Before:=ActiveSheet, Count:=1 End Sub
同じ意味にはなりますが、両者は実行結果が異なるケースがあります。たとえば、アクティブブックに[Sheet1][Sheet2][Sheet3]と3枚のワークシートが存在したとします。ここで、[Sheet2]と[Sheet3]を選択(グループ化)します。複数のシートをグループ化するには、シート見出しを、ShiftキーやCtrlキーを押しながらクリックします。
さて、[Sheet2]と[Sheet3]をグループ化した状態で
Sub Sample1() Worksheets.Add End Sub
を実行すると、挿入されるワークシートは、1枚ではなく2枚になります。
Addメソッドのヘルプには、引数Countの解説に次のように書かれています。
「既定値は1です」
省略するとどうなるか、は書かれていませんが、既定値が1と言われれば、
「省略すると1を指定したとみなされる」
と普通は思いますよね。
しかし、Addメソッドは、現在選択されているシートの数と同じ数の新シートを挿入するようです。それも「連続してグループ化されている場合」は、です。
[Sheet1][Sheet2][Sheet3]と3枚のワークシートが存在するブックで、今度は[Sheet1]と[Sheet3]を選択(グループ化)してみます。非連続のシートです。
この状態で
Sub Sample1() Worksheets.Add End Sub
を実行すると、エラーになります。
エラーメッセージは、
「そのコマンドは複数の選択範囲に対して実行できません」
だそうです。何だか、分かったような分からないようなメッセージですね。しかし、同じように[Sheet1]と[Sheet3]を選択(グループ化)した状態でも、
Sub Sample3() Worksheets.Add Count:=1 End Sub
のように、引数Countを指定するとエラーになりません。この場合は、もちろんアクティブシートの左側に、1枚の新しいワークシートが挿入されます。
もし「アクティブシートの左に1枚の新シートを挿入する」という動作を期待して
Sub Sample1() Worksheets.Add End Sub
というコードを書いたのなら、
となります。複数のシートがグループ化されているかどうかは次のように判定します。
Sub Sample4() If ActiveWindow.SelectedSheets.Count > 1 Then MsgBox "グループ化した状態では実行できません" Else Worksheets.Add End If End Sub
もし、何らかの事情で「連続したシートがグループ化されているか」あるいは「非連続のシートがグループ化されているか」を判別したいのでしたら、たとえば、次のように調べてはどうでしょう。
Sub Sample5() Dim i As Long With ActiveWindow If .SelectedSheets.Count = 1 Then MsgBox "グループ化されていません" Else For i = 1 To .SelectedSheets.Count - 1 If Not .SelectedSheets(i).Next Is .SelectedSheets(i + 1) Then MsgBox "非連続のシートがグループ化されています" Exit Sub End If Next i MsgBox "連続したシートがグループ化されています" End If End With End Sub