VBAでシートの大量コピー

VBAでシートを大量にコピーする場合は、下記の方法を勧めます。

Step1. つぎのサブプロシージャを定義する。

たくさんコピーしたいMicrosoft Excel オブジェクトの中で、
つぎのサブプロシージャを定義してあげます。

f:id:domodomodomo:20140723203313p:plain

Microsoft Excel オブジェクト
Sheet1

Option Explicit
Sub CopyForManyTimes(ByVal after As Worksheet)
    ' ①新規シートの挿入
    Dim NewSheet As Worksheet
    Set NewSheet = ThisWorkbook.Worksheets.Add(after:=after)

    ' ②データのコピー
    Me.Activate
    Me.Cells.Select
    Selection.Copy

    ' &ペースト
    NewSheet.Activate
    ActiveSheet.Paste
End Sub

 

Step2. 標準モジュールで呼び出す。

Sheet1 で定義してあげたとすると、つぎのように呼び出せます。

Option Explicit
Sub main()
     ' 呼び出し方1
    Sheet1.CopyForManyTimes after:=Worksheets(Worksheets.Count)
    '  呼び出し方2 
    Call Sheet1.CopyForManyTimes(after:=Worksheets(Worksheets.Count))
End Sub

 

これを勧める理由

これは、Worksheet オブジェクトの Copy メソッドの場合、
30枚前後しかコピーできないうえ、処理そのものも重い為。

ちなみにExcel再起動すれば、再度、30枚以降もコピーできるけど、
それは面倒だしね(´・ω・`)

Sheet1.Copy after:=Worksheets(Worksheets.Count)