クラスの生徒名ごとにシートを連続コピー
マクロ講座59回
Excel 2013 マクロ講座59回
生徒の成績記録簿を原本コピーで作る
支店ごとに同じフォーマットの売上表をたくさんコピーしたり、生徒名の成績管理表をたくさんコピーしたり、
日常業務では、原本をコピーして、違う名前をつけて管理するというような作業が多いですね。
今回は、生徒の成績記録簿をExcelで管理するという設定です。元になるブックには、原本シートと生徒名のリストシートがあります。
(サンプルファイルは、こちらから マクロ59回サンプルデータ)
シートを連続コピーしてリストでシート名をつける
リストシートには生徒名が記載されています。この生徒名ごとに原本をコピーしてシート名にしたいわけです。、
WorkSheetCopyメソッドを使う
WorkSheetコピーするという操作に使うのは、WorkSheetCopyメソッド。
どこにコピーするかはブックの最後尾にしたいので、After:=Worksheets(Worksheets.Count)と指定します。
どこにコピーするかはブックの最後尾にしたいので、After:=Worksheets(Worksheets.Count)と指定します。
Worksheets("原本").Copy After:=Worksheets(Worksheets.Count)
コピーしたシートには、リストシートに記載した生徒の名前をつけるので
リストシートにある個々の生徒名を名前という変数にします。
リストシートにある個々の生徒名を名前という変数にします。
Dim 名前 As Range
For Each……Nextステートメント 同じ処理を繰り返す
そしてFor Each……Nextステートメントをつかって、変数名前に対してシートをコピーして、
シート名には、名前の値を入れるようにします。
ここまでのコードは、
Sub リストから連続シート作成() Dim 名前 As Range For Each 名前 In Worksheets("リスト").Range("A2:A12") Worksheets("原本").Copy After:=Worksheets(Worksheets.Count) ActiveSheet.Name = 名前.Value Next 名前 End Sub
コードを実行すると、生徒名の成績管理シートがリストにある生徒の人数分作成されます。
リストの最後の岸田 明君まで作成されていますが、シートのA1セルは、生徒名となっています。
これでは、生徒名を入力しなければなりません。そこで、コードに1行追加します。
ActiveSheet.Range("A1") = 名前.Value
ActiveSheet.Range("A1") = 名前.Value
Sub リストから連続シート作成1() Dim 名前 As Range For Each 名前 In Worksheets("リスト").Range("A2:A12") Worksheets("原本").Copy After:=Worksheets(Worksheets.Count) ActiveSheet.Name = 名前.Value ActiveSheet.Range("A1") = 名前.Value Next 名前 End SubこれでA1セルに生徒名が入ります。
コードをもう少し、Withステートメントで簡潔にすると、
Sub リストから連続シート作成2() Dim 名前 As Range For Each 名前 In Worksheets("リスト").Range("A2:A12") Worksheets("原本").Copy After:=Worksheets(Worksheets.Count) With ActiveSheet .Name = 名前.Value .Range("A1") = 名前.Value End With Next 名前 End SubActiveSheetという同一オブジェクトの記述を簡潔にすることができます。