ひな形をコピペしてシートをたくさん作らなければならないとしたらどうしましょう。
2、3件ならいいんですが、20とか30くらいになってくると、超面倒。
そういうときはVBAの出番です。
Excel業務あるあるシリーズ
一覧からシートを新規に作成するコード
listシートにtest1~test15のシートがあります。
test1~test15という名前のシートを作成してみます。
listシート
test1 test2 test3 test4 test5 test6 test7 test8 test9 test10 test11 test12 test13 test14 test15
Sub createNewSheetFromList() '行数用の変数 Dim i As Long 'リストシート Dim listSheet As Worksheet: Set listSheet = Worksheets("list") '最終行を格納する変数 Dim maxRow As Long: maxRow = listSheet.Cells(Rows.Count, 1).End(xlUp).Row '新しいシート名を格納する変数 Dim sheetName As String '新しいシートを格納する変数 Dim newSheet As Worksheet For i = 1 To maxRow sheetName = listSheet.Cells(i, 1).Value 'WorkSheets.Addメソッドは戻り値で 'Worksheetオブジェクトを返すので変数に格納する Set newSheet = Worksheets.Add 'シート名を変更する newSheet.Name = sheetName Next i End Sub
コードを実行してみると・・・
新しいシート(test1~test15)が作成されました!
次は少し応用編。
ひな形をコピーして新規にシートを作成するコード
新規にシートを追加するコードの応用で、
ひな形のシートをコピペして新規シートを作成してみます。
リストは先ほどのSheet1を使用します。
ひな形となるシートはtemplateシートとして同じブックに準備します。
templateシート
シート名の横のB2セルには、各シートの名前を入れてみます。
先ほどのコードを少し改造してみました。
Sub createNewSheetFromListUsingTemplate() '行数用の変数 Dim i As Long 'リストシート Dim listSheet As Worksheet: Set listSheet = Worksheets("list") '最終行を格納する変数 Dim maxRow As Long: maxRow = listSheet.Cells(Rows.Count, 1).End(xlUp).Row '新しいシート名を格納する変数 Dim sheetName As String '新しいシートを格納する変数 Dim newSheet As Worksheet 'ひな形となるシートを格納する変数 Dim templateSheet As Worksheet: Set templateSheet = Worksheets("template") For i = 1 To maxRow sheetName = listSheet.Cells(i, 1).Value 'WorkSheets.copyメソッドは何も返さないので変数に格納できない! templateSheet.Copy after:=templateSheet '新しく追加されたシートはアクティブになっているので 'ActiveSheetオブジェクトを利用する Set newSheet = ActiveSheet 'シート名を変更する newSheet.Name = sheetName 'B2にシート名を入力する newSheet.Range("B2").Value = sheetName Next i End Sub
実行すると・・・
ひな形をコピーして、シートが新規で作成され、B2にシート名が入力されました。
newSheet.Range("B2").Value = sheetName
この部分を変更すれば、ひな形シートから値を変えつつ新規作成することできます。
注意点
一覧は重複がない前提ですので、一覧に重複があるとエラーになります。
シート名を変更するときにエラーになりますので、ご注意ください。
コピペして利用される場合は、初期処理として一覧の重複チェックが必要かと思います。
終わりに
Excelのシートをコピーして値を変えて、またコピーして・・・
延々とこんな作業をしている人、ぜひこのコードを使って業務を自動化してください!
パソコンの作業はどんどん自動化して、楽をしてほしいと思います。
ここまでお読みいただきありがとうございました。