Excel 2013 マクロ講座59回

生徒の成績記録簿を原本コピーで作る

支店ごとに同じフォーマットの売上表をたくさんコピーしたり、生徒名の成績管理表をたくさんコピーしたり、 日常業務では、原本をコピーして、違う名前をつけて管理するというような作業が多いですね。
今回は、生徒の成績記録簿をExcelで管理するという設定です。元になるブックには、原本シートと生徒名のリストシートがあります。

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

シートを連続コピーしてリストでシート名をつける

リストシートには生徒名が記載されています。この生徒名ごとに原本をコピーしてシート名にしたいわけです。、
リストの名前でシートを連続コピーマクロ1

WorkSheetCopyメソッドを使う

WorkSheetコピーするという操作に使うのは、WorkSheetCopyメソッド。
リストの名前でシートを連続コピーマクロ2
どこにコピーするかはブックの最後尾にしたいので、After:=Worksheets(Worksheets.Count)と指定します。
Worksheets("原本").Copy After:=Worksheets(Worksheets.Count)
コピーしたシートには、リストシートに記載した生徒の名前をつけるので
リストシートにある個々の生徒名を名前という変数にします。
  Dim 名前 As Range

For Each……Nextステートメント 同じ処理を繰り返す

そしてFor Each……Nextステートメントをつかって、変数名前に対してシートをコピーして、 シート名には、名前の値を入れるようにします。 リストの名前でシートを連続コピーマクロ3
ここまでのコードは、
Sub リストから連続シート作成()
  Dim 名前 As Range
  For Each 名前 In Worksheets("リスト").Range("A2:A12")
     Worksheets("原本").Copy After:=Worksheets(Worksheets.Count)
     ActiveSheet.Name = 名前.Value
   Next 名前
End Sub
    
コードを実行すると、生徒名の成績管理シートがリストにある生徒の人数分作成されます。
リストの名前でシートを連続コピーマクロ4
リストの最後の岸田 明君まで作成されていますが、シートのA1セルは、生徒名となっています。 これでは、生徒名を入力しなければなりません。そこで、コードに1行追加します。
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セルに生徒名が入ります。
リストの名前でシートを連続コピーマクロ5
コードをもう少し、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 Sub
    
ActiveSheetという同一オブジェクトの記述を簡潔にすることができます。
スポンサーリンク
スポンサーリンク