- 締切済み
マクロでのシートコピー数制限?
エクセルでマクロを使いシートをコピーしようと思っています。以下のようなマクロを作ったのですが、シートを12、3回コピーするとそれ以後、全てのシートでシートのコピーが出来なくなります。 何らかの制限でもあるのでしょうか? 分かる方がいらっしゃいましたら教えてください。 Dim Check, Counter Check = True: Counter = 0 b = 31 'シート の名前 Do While Counter < 15 Sheets("原本").Select Sheets("原本").Copy Before:=Sheets(2) Sheets("原本 (2)").Select Sheets("原本 (2)").Name = b b = b - 1 Counter = Counter + 1 Loop (マクロの知識が余りありませんので不細工なのはご容赦下さい)
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 すごく、凝った作りのマクロですが、15回になったら、それで終了するようになっていますが、なぜ、そのような設定になっているのでしょうか? それから、 Sheets("原本").Copy Before:=Sheets(2) 'とすれば、そこは、ActiveSheet になりますから、Selectは必要なく、 'ActiveSheet.Name = ●● で名前は付けられます。 私のサンプルです。 なぜ、 "Counter < 15" になっているのか考えて、もしも、既に作られているシートがあるからではないかと考えました。そのためのチェックルーチンをおきました。 '<標準モジュールに設定してください> Sub SheetCopies() 'シートを1~31 まで作るマクロ Dim Counter As Integer Dim SheetCounter As Integer Dim Check As Boolean Dim dummy As Variant Const MaxSheetCounter As Integer = 31 'シート の名前 '必要だったら、サブルーチンに飛ぶ 'Call SheetAlignment SheetCounter = 1 Application.ScreenUpdating = False Do While SheetCounter <= MaxSheetCounter '既に作られているかもしれないためのルーチン On Error Resume Next dummy = Sheets(CStr(SheetCounter)).Name If Err.Number > 0 Then Check = True On Error GoTo 0 If Check Then Sheets("原本").Copy After:=Sheets(Sheets.Count) ActiveSheet.Name = CStr(SheetCounter) End If SheetCounter = SheetCounter + 1 Check = False Loop Application.ScreenUpdating = True End Sub Private Sub SheetAlignment() 'シートを原本のみにするマクロ Dim sh As Worksheet For Each sh In Sheets If Sheets("原本").Name <> sh.Name Then Application.DisplayAlerts = False sh.Delete Application.DisplayAlerts = True End If Next sh End Sub なお、あまり、このマクロを何度も繰り返しますと、メモリの消費でエラーを起こすことがあるかもしれません。
- hana-hana3
- ベストアンサー率31% (4940/15541)
excelのシートの仕様やメモリ仕様の関係で制限が出るようです。 コピー方法を変えると数百枚は可能かと思います。