Excelでフォーマット(決まった様式、ひな形、書式等)のシートをコピーして一部を変更し、使いたいといったことがあるかと思います。
この記事では、VBAでシートをコピーし、シート名を変更する方法をご紹介します。
シートをコピーする
シートのコピーはとても簡単です。
Sub シートコピー()
Sheets("点検フォーマット").Copy After:=Sheets("点検フォーマット")
End Sub
▼実行前後
Afterの部分をBeforeに変更することで、コピーしたシートを前に挿入することもできます。
ワークシートを指定する場合、通常「Worksheets(“シート名”)」と書きますが、省略して、「Sheets(“シート名”)」でも問題ありません。
シートを末尾にコピーするには?
シートを一番最後にコピーしたい場合があるかと思います。その場合は以下のコードで実行できます。
Sub シートコピー()
Sheets("点検フォーマット").Copy After:=Sheets(Sheets.Count)
End Sub
シートを新しいブックにコピーする
実は同じブックにシートをコピーするよりも新しいブックにコピーするほうがとても簡単です。
Sub シートを新しいブックにコピー()
Sheets("点検フォーマット").Copy
End Sub
これだけで新しいブックが開き、指定したシートがコピーされます。
コピーしたシートのシート名を変更する
シートをコピーした後、名前も変えるのが一般的な使い方かと思います。シートコピーした後は、コピーしたシートがアクティブになるため、以下のコードで名前を変更できます。
Sub シートコピー名前変更()
Sheets("点検フォーマット").Copy After:=Sheets("点検フォーマット")
ActiveSheet.Name = "点検表" & Format([C4], "YYYY年M月")
End Sub
▼実行結果
既に同じ名前のシートがある場合エラーがでますので、ご注意ください。
同じシート名でエラーが出ないようにするには?
エラーを回避する一例として以下のコードをご紹介します。
少し長くなりますが、以下のコードで同じシート名でエラーが発生しないようにすることができます。
Sub シートコピーエラー回避()
Dim Flag As Boolean
Dim WSheet As Worksheet
Dim SheetName As String
SheetName = "点検表" & Format([C4], "YYYY年M月") '①
Flag = False
For Each WSheet In Worksheets ’②
If WSheet.Name = SheetName Then Flag = True
Next
If Flag = True Then ’③
MsgBox "既にシートが存在します。"
Exit Sub
End If
Sheets("点検フォーマット").Copy After:=Sheets("点検フォーマット") ’④
ActiveSheet.Name = SheetName
End Sub
■解説
①で保存するシート名を決めます。
②でブック内のシートに同じ名前があるかチェックします。
③で同じシート名がある場合は、メッセージを表示し終了します。
同じシート名がなければ、④でコピーとシート名変更が実行されます。
シートコピーの実践例
最後に、シートコピーを使った実践的な使い方をご紹介します。
フォーマットをコピーし、新しいブックで保存するコードになります。
Sub シートコピー変更保存()
Dim SelectDate As Date
Dim SheetName As String
Dim FileName As String
'翌月1日の日付を取得
SelectDate = DateSerial(Year(Date), Month(Date) + 1, 1)
'シート名&エクセル名設定
SheetName = Format(SelectDate, "YYYY年M月点検表")
FileName = ThisWorkbook.Path & "\" & Format(SelectDate, "YYYY年M月点検表") & ".xlsx"
'シートコピー
Sheets("点検フォーマット").Copy
With ActiveSheet
.Name = SheetName
.[C4] = SelectDate
End With
'エクセル保存
ActiveWorkbook.SaveAs FileName
ActiveWorkbook.Close
MsgBox SheetName & "のエクセルを作成しました。"
End Sub
動作の大まかな流れとしては次の通りです。
- 翌月の日付を取得します。
- 取得した日付からシート名と保存するファイル名を決めます。
- シートをコピーし、C4セルに日付を入れます。
※点検フォーマットには、C4の日付に連動し日付が変わるよう関数を入れてます。 - 2で指定したファイル名で保存し、ブックを閉じます。
- メッセージを表示して終了です。
▼実行結果
コメント