アプリ版:「スタンプのみでお礼する」機能のリリースについて

エクセルでマクロを使いシートをコピーしようと思っています。以下のようなマクロを作ったのですが、シートを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

(マクロの知識が余りありませんので不細工なのはご容赦下さい)

A 回答 (2件)

こんばんは。



すごく、凝った作りのマクロですが、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


なお、あまり、このマクロを何度も繰り返しますと、メモリの消費でエラーを起こすことがあるかもしれません。
    • good
    • 0

excelのシートの仕様やメモリ仕様の関係で制限が出るようです。


コピー方法を変えると数百枚は可能かと思います。

参考URL:http://oshiete1.goo.ne.jp/kotaeru.php3?q=1685998
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!