繰り返し処理 Excel2013 マクロ講座 58回

リストの項目に対応したシートを複数つくりたい

生徒の氏名一覧や会社の支店名一覧などのような表名にしたい入力済みのリストがあり、それらの名前でシートを作成したい場合、手入力では大変です。
今回は、シートに記載された支店名一覧にある支店それぞれの名前でシートを一括で作成するマクロを考えます。

(サンプルファイルは、こちらから マクロ58回サンプルデータ

入力したリストにある名前で連続シート作成

シートには、支店名一覧のリストが作成されています。
名前を指定して複数シートを一括で作成するマクロマクロ1
今回のマクロでしたいことは、複数のシートをそれぞれ別の名前を指定して一括で作成するということです。
名前を指定して複数シートを一括で作成するマクロマクロ2
今回作ったコードはこのようになっています。
支店名一覧の項目
Sub リストから連続シート作成()
  Dim 項目 As Range
  For Each 項目 In Selection
        Sheets.Add after:=ActiveSheet
        ActiveSheet.Name = 項目.Value
   Next 項目
End Sub
    
名前を指定して複数シートを一括で作成するマクロマクロ3
何度も出てきたFor Each...Nestステートメントを使って、選択範囲の項目に対して繰り返し処理をしています。
名前を指定して複数シートを一括で作成するマクロマクロ4
変数は、処理をしている各要素のことです。サンプルの例では、わかりやすくするために”項目”と日本語にしています。操作対象は、汎用的に使えるようにSelectionにしていますが、処理の対象となる配列やリストなどを指定します。
操作対象を固定したい場合は、Range("A2:A10")のように対象となるセル範囲を指定してしても構いません。 また、ActiveSheetを2度書く必要はないので、
        Sheets.Add after:=ActiveSheet
        ActiveSheet.Name = 項目.Value
の部分を次のように一行にまとめることもできます。
Sub リストから連続シート作成2()
  Dim 項目 As Range
  For Each 項目 In Range("A2:A10")
        Sheets.Add(After:=ActiveSheet).Name = 項目.Value
   Next 項目
End Sub
    
シートを追加するコードは、Addメソッドを使います。Addメソッドはオブジェクトを追加するメソッドです。 Sheets.Add after:=ActiveSheetで指定したシート(ここではアクティブシート)の直後に新しいシートを追加するという意味になります。

名前をつけて複数シートを作成するマクロ6
シートを追加するのを、アクティブシートの後ろではなく、ブックの最後にしたい場合は、次のコードに変更します。
Sub リストから連続シート作成3()
' ブックの最後尾にシートを追加
  Dim 項目 As Range
  For Each 項目 In Selection
        Sheets.Add(After:=Worksheets(Worksheets.Count)).Name = 項目.Value
   Next 項目
End Sub
    
現在のシートの枚数が、最後尾のシートのインデックスに等しいのでこのコードが使えます。
スポンサーリンク
スポンサーリンク