HOME > 即効テクニック > Excel VBA > シート操作関連のテクニック > 連続名の複数シートを挿入する

即効テクニック

シート操作関連のテクニック

連続名の複数シートを挿入する

(Excel 97/2000/2002/2003/2007)

ブックに新しいワークシートを挿入するには、WorksheetsコレクションのAddメソッドを使います。次のコードは、アクティブシートの後ろに新しいワークシートを挿入します。

Sub Sample()
    Worksheets.Add After:=ActiveSheet
End Sub
挿入と同時に、新しいワークシートの名前を変更するには、Nameプロパティに設定したい名前を指定します。
Sub Sample()
    Worksheets.Add(After:=ActiveSheet).Name = "1月"
End Sub
では「1月」「2月」「3月」といった連続名の複数ワークシートを一気に挿入するにはどうしたらいいでしょう。月の数値部分が連続していますから、変数の値を1つずつ増加させながらFor..Nextなどで繰り返せばできそうです。 しかし「月曜日」「火曜日」といった文字列だけの連続名には対応できません。こんなときは、RangeオブジェクトのAutoFillメソッドを使うと便利です。AutoFillメソッドは、ワークシート上でフィルハンドルをドラッグする操作をマクロから実行できます。 次のコードは、セル範囲A1:A5に「月曜日」から始まる連続データを入力します。
Sub Sample()
    With Range("A1")
        .Value = "月曜日"
        .AutoFill Destination:=Range("A1:A5")
    End With
End Sub
Destination:=Range("A1:A5")はセル範囲A1:A5を表しますが、セルA1から始まる5つの連続データでしたらDestination:=Range("A1").Resize(5)と書くこともできます。この方が作成する連続データの個数を把握しやすいですね。 これを応用して、指定された文字列で始まる連続データを作成し、その連続データを新しく挿入するワークシート名に設定してみましょう。 ユーザーからは開始の文字列と、挿入するシートの枚数を指定してもらいます。 指定された開始文字列と枚数から、ここではSheet1のA列に連続データを作成し、その連続データを新しく挿入したワークシートの名前に設定します。
Sub Sample()
    Dim StartValue As String, n As Long, I As Long
    StartValue = InputBox("最初の文字列は?")
    n = InputBox("作成する枚数は?")
    With Worksheets("Sheet1").Range("A1")
        .Value = StartValue
        .AutoFill Destination:=.Resize(n)
    End With
    For I = 1 To n
        Worksheets.Add(After:=ActiveSheet).Name = _
                        Worksheets("Sheet1").Cells(I, 1)
    Next I
    Worksheets("Sheet1").Range("A1").Resize(n).ClearContents
End Sub

長くなるのでエラー対策は割愛しています。開始の文字列や枚数によっては連続データを作成できませんので、InputBoxで入力された値をチェックした方が確実ですし、すでに存在するシート名と同じ名前を設定しようとするとエラーになりますので、本来ならそこも判定すべきでしょう。 また、ここではSheet1のA列に連続データを作成しましたが、より安全な処理をするには、作業用のワークシートを1枚挿入して連続データ作り、最後に作業用シートを削除するなどの工夫も有効です。