名前を指定して複数シートを一括で作成するマクロ Excel 2013 マクロ講座
繰り返し処理 Excel2013 マクロ講座 58回
リストの項目に対応したシートを複数つくりたい
生徒の氏名一覧や会社の支店名一覧などのような表名にしたい入力済みのリストがあり、それらの名前でシートを作成したい場合、手入力では大変です。
今回は、シートに記載された支店名一覧にある支店それぞれの名前でシートを一括で作成するマクロを考えます。
(サンプルファイルは、こちらから マクロ58回サンプルデータ)
入力したリストにある名前で連続シート作成
シートには、支店名一覧のリストが作成されています。


今回のマクロでしたいことは、複数のシートをそれぞれ別の名前を指定して一括で作成するということです。


今回作ったコードはこのようになっています。
支店名一覧の項目
支店名一覧の項目
Sub リストから連続シート作成()
Dim 項目 As Range
For Each 項目 In Selection
Sheets.Add after:=ActiveSheet
ActiveSheet.Name = 項目.Value
Next 項目
End Sub

何度も出てきたFor Each...Nestステートメントを使って、選択範囲の項目に対して繰り返し処理をしています。


変数は、処理をしている各要素のことです。サンプルの例では、わかりやすくするために”項目”と日本語にしています。操作対象は、汎用的に使えるように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で指定したシート(ここではアクティブシート)の直後に新しいシートを追加するという意味になります。


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