EXCELシートを複写するとエラーが発生する理由と対策

このQ&Aのポイント
  • EXCELのシートを複写するとエラーが発生する理由とは、マスターシートをコピーしてデータを書き込むプログラムがシート作成の上限に達したためであり、エラーの対策としては、シート作成の前に書き込むデータを処理する方法がある。
  • EXCELのシートを複写する際にエラーが発生する理由は、作成するシートの枚数が多いためにEXCEL.EXEのエラーが発生していることであり、エラーの対策方法としては、シートを複写する前にシートの可視性を切り替える方法がある。
  • EXCELのシートを複写するとエラーが発生する原因は、Excelのシートの作成上限に達したためであり、解決策としては、シートを作成する前に必要な処理を行うことが挙げられる。具体的には、シート作成前にデータの書き込み処理を行う方法などが考えられる。
回答を見る
  • ベストアンサー

EXCELのシートを複写するとエラーが発生する理由は

マスターシートをコピーしてデータを書き込むプログラムを作ったのですが、作成するシート枚数が多いとEXCEL.EXEのエラーが発生します。 確認の為、以下のマクロを走らせたところ、1回目は良かったが2回目でエラーが発生します。その理由と対策があれば教えてください。 For I = 1 To 100 Sheets("MasterSheet").Visible = True Sheets("MasterSheet").Select Sheets("MasterSheet").Copy Before:=Sheets("MasterSheet") Sheets("MasterSheet (2)").Select ActiveSheet.Unprotect Sheets("MasterSheet (2)").Name = "MST:" + CStr(I) Sheets("MasterSheet").Visible = False Next 本当のプログラムがNEXTの前にシートにデータを記入するのですが、TESTではシート作成だけを作りました。

質問者が選んだベストアンサー

  • ベストアンサー
  • ki-aaa
  • ベストアンサー率49% (105/213)
回答No.3

アクティブシートが追加されたシートになるからでは。 Sub aa() Dim i Sheets("MasterSheet").Activate For i = 1 To 10 Sheets("MasterSheet").Select Sheets("MasterSheet").Copy Before:=Sheets("MasterSheet") ActiveSheet.Name = "MST_" & i Sheets("MasterSheet").Activate Next i End Sub これで動きました。

kazu828
質問者

お礼

Activateが正解みたいです ありがとうございました。

その他の回答 (3)

  • ki-aaa
  • ベストアンサー率49% (105/213)
回答No.4

#3です。 前の回答を取り消します。 Sheets("MasterSheet").Activateはなくても、普通に動きます。 すみませんでした。

  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.2

こんにちは。 2回目のエラーはシート名が同じだからでは? Sub aa() Dim ws As Worksheet, cws As Worksheet, j As Integer  j = 1  Set ws = Sheets("MasterSheet")  For i = 1 To 100   ws.Copy before:=ws   Set cws = ActiveSheet    Do While cws.Name = "MasterSheet (2)"      On Error GoTo ER:      cws.Name = "MST_" & j    Loop   cws.Visible = True  Next i  Exit Sub ER:  j = j + 1  Resume Next End Sub 蛇足ですが、シートが数百枚もあるブックは使いずらいし、不安定要素の原因にもなります。仕様を検討されては?

kazu828
質問者

お礼

ありがとうございます。 2回目と言っても当然ながら前回の作成したシートは削除してから実行していますが、なぜかエラーが発生してしまったのです。

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

Next の2行前のSheets("MasterSheet (2)").Name = "MST:" + CStr(I) で エラーになりますね。(実行時エラー1004) 名前に":"を使用してはまずいでしょう。 Sheets("MasterSheet (2)").Name = "MST_" + CStr(I) にしたら正常に動作しました。 WinME+Office2K

kazu828
質問者

お礼

お礼と補足を間違えて入力してしまいました。 申し訳ない!! "MST:"は仮の意味で、確かに":"はまずいですよね。 ":"なしでもある所でエラーとなります。 メモリの問題なのか? これは私のパソコンだけではなく、会社では他のPCでも発生しています。

kazu828
質問者

補足

申し訳ない!! "MST:"は仮の意味で、確かに":"はまずいですよね。 ":"なしでもある所でエラーとなります。 メモリの問題なのか? これは私のパソコンだけではなく、会社では他のPCでも発生しています。

関連するQ&A

  • 複数シートをループさせてマクロを簡素化したい

    win7 Excel2007 でマクロ作成中の初心者です。 シート数の変動する複数シートの特定範囲を一枚のシートに右列方向に、値を貼り付けたいです。 自動記録でコード作成しましたが、もっと簡素化して軽くしたいです。 シートに対するループ等の作成ができません。どうかご指導お願いします。 Sub 勤怠最終データ作成() Worksheets(1).Select '1番左のシートを選択 ActiveSheet.Unprotect Range("B29:BM60").Select '複写範囲はすべて同じ Selection.Copy Sheets("総括").Select '値の貼り付けシートはすべて同じ Range("A2").Select '値の貼り付け先 Selection.PasteSpecial Paste:=xlPasteValues ’-------------------------------------- Worksheets(2).Select '2枚目のシートを複写 ActiveSheet.Unprotect Range("B29:BM60").Select Selection.Copy Sheets("総括").Select 最終セルの選択 '値の貼り付け先 Selection.PasteSpecial Paste:=xlPasteValues ’-------------------------------------- Worksheets(3).Select '3枚目のシートを複写 ActiveSheet.Unprotect Range("B29:BM60").Select Selection.Copy Sheets("総括").Select 最終セルの選択 Selection.PasteSpecial Paste:=xlPasteValues ’-------------------------------------- Worksheets(4).Select '4枚目のシートを複写 ActiveSheet.Unprotect Range("B29:BM60").Select Selection.Copy Sheets("総括").Select 最終セルの選択 Selection.PasteSpecial Paste:=xlPasteValues 以下省略 End Sub

  • Excelのシート名変更について

    いつもお世話になっています。 エクセルにおいて、シート名を自動変更することは可能でしょうか? 現在、1ファイルにシートを100枚用意してあります。 それぞれのシートに「1」~「100」という名前を付けてあります。 このファイルをコピーして、新しいファイルのシート名を「101」~「200」としたいのです。 現在は、一枚ずつ手入力をしていますが、後10ファイル以上(1000シート以上)あり、また今後も発生するためできるだけ簡単に変えられる方法を探しています。 このOKWave内を検索し、欲しい内容に近い回答がありましたので、下記のようなマクロを作成してみましたが、「インデックスが正しくありません」というエラーが出てしまいました。 マクロについては、全く知識がないので、ぜひご教授のほどよろしくお願いいたします。 Sub Macro1() For counter = 101 To 200 Sheets(counter).Select ActiveSheet.Name = CStr(counter) Sheets(counter + 1).Select Next End Sub

  • エクセル2007マクロ シート間のセルコピー

    [Sheet1]にあるデータを[Sheet2]にコピーするマクロボタンを[Sheet2]に作りたいのですが、マクロがよく分からないので、「マクロの記録」で作成してみました。 Sub siken() ' ' siken Macro ' ' Sheets("Sheet1").Select Range("A1").Select Selection.Copy Sheets("Sheet2").Select Range("A1").Select ActiveSheet.Paste Sheets("Sheet1").Select Range("B3").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet2").Select Range("B3").Select ActiveSheet.Paste Sheets("Sheet1").Select Range("B6:D6").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet2").Select Range("B6").Select ActiveSheet.Paste End Sub (実際はもっと多くのセルをコピーします) マクロを実行すると、ちゃんとコピーできるのですが、セルをコピーする都度[Sheet1]と[Sheet2]が交互に表示されます。 コピー元の[Sheet1]を表示させずにマクロを実行させるにはどのようにしたらよいのでしょうか? よろしくお願いします。

  • エクセルのマクロを有効にしないと表示しないようにする方法

    エクセルでマクロを有効にしないと、シートが表示されないように設定したいのですが、下記の様に(ほかの方の投稿から)入力すると三行目がエラーになります。素人なので、よくわかりません。どのようにしたら、マクロを有効にしないと全てのシートを表示しないようにできるのでしょうか? ご教授いただけますでしょうか Private Sub Workbook_BeforeClose(Cancel As Boolean) Sheets(\"Sheet1\").Visible = False Sheets(\"Sheet2\").Visible = False ActiveWorkbook.Protect Password:=\"error123\" End Sub Private Sub Workbook_Open() ActiveWorkbook.Unprotect Password:=\"error123\" Sheets(\"Sheet1\").Visible = True Sheets(\"Sheet2\").Visible = True Sheets(\"Sheet1\").Select End Sub

  • 【Excel VBA】ワークシートの表示(続き)

    すみません。 追記が出来なかったため、コードの続きをこちらに記載します。 For i = 1 To 12 If actsht = tmp(i) Then Flag = 1 Anser = MsgBox("翌月分シートを作成しますか?", vbYesNo + vbDefaultButton1, "確認") If Anser = vbYes Then ActiveSheet.Copy After:=ActiveSheet ActiveSheet.Name = tmp(i + 1) Sheets(actsht).Tab.ColorIndex = 2 Sheets(actsht).Range("B3").Value = Sheets("Sheet2").Range("A1").Value Sheets(actsht).Range("B4").Value = Sheets("Sheet2").Range("A2").Value ActiveSheet.Range("A2").Select Exit For ElseIf Anser = vbNo Then Exit For End If End If Next If Flag = O Then MsgBox ("新しいワークシートを作成出来ません。") End If If actsht = tmp(i) Then If Sheets(元データ).Visible = False Then Sheets(元データ).Visible = True End If End If End Sub

  • コピペ,ドラッグ&ドロップをシート全体及び複数範囲指定で禁止したい

    コピペ,ドラッグ&ドロップをシート全体及び複数範囲指定で禁止したい お世話になります。 上記の内容を実現したいのですが This Workbookには Private Sub Workbook_BeforeClose(Cancel As Boolean) Sheets("Sheet1").Visible = True Sheets("Sheet2").Visible = False Sheets("Sheet3").Visible = False Sheets("Sheet1").Select ActiveWorkbook.Protect Password:="123" ActiveWorkbook.Save End Sub ――――――――――――――――――――――――――――――――――――――― Private Sub Workbook_Open() ActiveWorkbook.Unprotect Password:="123" Sheets("Sheet2").Visible = True Sheets("Sheet3").Visible = True Sheets("Sheet2").Select Sheets("Sheet3").Select Sheets("Sheet1").Visible = False End Sub が入っていますがどのようにすればいいのでしょうか? ご教示お願いします。 ちなみにexcel2003です。

  • エクセル・マクロ シートの非表示でマクロのエラー

    エクセル勉強中です。 マクロの記憶でSheet2の元データの図と記入できるセルをSheet1の有効セルにコピペするマクロを作りました。 複数の方が使う予定なので元データのSheet2を非表示にしたところマクロがエラーになりました。 どうしたらよいでしょうか? また貼り付けをする時、微妙に元データのシートがちらちらと移ります。 こちらも合わせてご指導いただけましたら助かります。   よろしお願いします。 Sub b1ab1() ' ' b1ab1 Macro ' ' Sheets("Sheet2").Select Range("AK48:AP56").Select Selection.Copy Sheets("ダクト制作単品図").Select ActiveSheet.Paste End Sub

  • エクセルでシートのコピー

    いつもお世話になっています、マクロ初心者です。 カレンダーの1月分をシートごと12月までコピーするのに、サンプル集をそのまま引用したのですが、シート名を指定する所でエラーになってしまいます。 $"月"の部分を削除すればうまくいきます。 エクセル2000パーソナルだからなのでしょうか? 'シートコピー Worksheets(1).Cells.Copy For i = 2 To 12 Worksheets.Add after:=Worksheets(ActiveSheet.Index) ActiveSheet.Name = CStr(i) & "月"(この行がエラーになります) ActiveSheet.Paste Range("A1").Select Next i エクセル2000パーソナルで処理する方法がありましたら教えてください。

  • EXCEL VBA シートをコピーする時にエラーが発生してしまう件

    EXCEL VBAでシートをコピーするマクロを作成しているのですが、【10】にて時々エラーが発生してしまいます。100シート分ぐらいをコピーしたいのですが、途中で30シートぐらいの所で止まってしまいます。 (シートが10前後だと問題なく処理が終ります) 止まってしまうシートはまちまちなので、 シート名称が問題だとは考えにくいです。 ちなみに【8】でのsheets_nameは取得できてます。 前後に何かを入れることにより解決するのか、 ソース本体をいじれば解決するのか、 詳しい方、何卒、解決方法を ご指導いただけますよう宜しくお願いします。 【1】 '取得した配列の数だけループを行う。 【2】 For i = LBound(test) To 配列数 - 1 【3】 【4】 列番号 = Mid(test(i), 4, 3) 【5】 Debug.Print "test(" & i; ") : " & test(i) 【6】 【7】 'FORMATシートをコピーし、その名称を変数名にする 【8】 sheets_name = Worksheets("実績").Cells(18, 列番号).Value 【9】 【10】 Worksheets("FORMAT").Copy After:=Sheets("FORMAT") 【11】 【12】 ActiveSheet.Name = (sheets_name) 【13】 Cells(4, 3) = (sheets_name)

  • Excel VBAの自動生成VBAでエラーが発生?

    ' ↑ 'この上にピポットテーブルを作る為のデータをSheetに生成し '下記でそのSheetに名前を付けてピポットテーブルを作成するVBA Dim wk As String wk = Application.InputBox("シート名を入力ください") If wk <> "False" Then ActiveSheet.Name = wk Else MsgBox "キャンセルされました。" Exit Sub End If Sheets.Add MsgBox "選択したシート名は" & wk & "です。" '-------------------------------------------------------------------------------------------------------------------- 'この中でエラーメッセージが出てしまっています。 'どこがいけないのでしょうか? ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _ wk & "!R1C1:R95C18", Version:=xlPivotTableVersion15).CreatePivotTable _ TableDestination:="Sheet1!R3C1", TableName:="ピボットテーブル1", DefaultVersion _ :=xlPivotTableVersion15 '------------------------------------------------------------------------------------------------------------------- Sheets("Sheet1").Select Cells(3, 1).Select With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("UserName") .Orientation = xlRowField .Position = 1 End With ActiveSheet.PivotTables("ピボットテーブル1").AddDataField ActiveSheet.PivotTables( _ "ピボットテーブル1").PivotFields("作業時間"), "合計 / 作業時間", xlSum ActiveSheet.PivotTables("ピボットテーブル1").CompactLayoutRowHeader = "UserName" Rows("1:2").Select Selection.Delete Shift:=xlUp Range("C16").Select Sheets("Sheet1").Select Sheets("Sheet1").Name = "名別"

専門家に質問してみよう