エクセルマクロ実行時エラー'1004'とは?

このQ&Aのポイント
  • エクセルマクロ実行時に表示されるエラー'1004'は、For~Next構文内でシートのコピーが失敗したことを示しています。
  • このエラーが発生する原因は、コードの誤りではなく、コピー先のシートの名前が既に存在する場合や、コピー元やコピー先のシートが保護されている場合などが考えられます。
  • エラー'1004'が表示される場合は、まずコード内のシートコピー箇所を確認し、コピー先のシート名や保護状態などを適切に設定する必要があります。
回答を見る
  • ベストアンサー

エクセル マクロ実行時エラー’1004’

For~Next構文内でシートコピーしていると途中で、 実行時エラー'1004’ WorksheetクラスのCopyメソッドが失敗しました。 が表示されることがあります。 該当のFor~Next文は10回以上実行されているので、コードの誤りではないと思うのですが、なぜ「Copyメソッドが失敗」するのかわかりません。 理由/対処方法がわかればありがたいと思い質問させていただきます。 **該当コード** Sub 評価シート作成()   Sheets(社員一覧).Select   行 = 1   Do     ReDim Preserve 社員CD(行)     ReDim Preserve 氏名(行)     社員CD(行) = Cells(行 + 1, 1).Value     氏名(行) = Cells(行 + 1, 2).Value     行 = 行 + 1   Loop Until Cells(行, 1) = ""   人数 = 行 - 2   For 回数 = 1 To 人数     Sheets(評価シート).Select     Sheets(評価シート).Copy after:=Sheets(評価シート)     ActiveSheet.Name = 氏名(回数)     Cells(4, 5) = 氏名(回数)     Cells(4, 3) = 社員CD(回数)   Next 回数 End Sub ***************************** よろしくお願いします

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

  • ベストアンサー
  • pentium100
  • ベストアンサー率45% (689/1517)
回答No.3

ひょっとしてこれに該当するのかな? Excel でプログラムを使用してワークシートをコピーするとランタイム エラー 1004 が発生する http://support.microsoft.com/kb/210684/ja

Sinogi
質問者

お礼

テンプレートでの方法で無事対応できました。

Sinogi
質問者

補足

URL参考になります。 テンプレートでの方法を試してみようと思います。

その他の回答 (3)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

こんにちは。 コードとしては、失礼ですが、動的配列を使いながら、2バイト文字変数では、ものすごくバランスが悪いです。申し訳ないのですが、私には、修正とかいうレベルではないです。2バイト文字の変数のオンパレードはミスの元です。動的配列を使いたい気持ちは分からないわけではないけれども、そのためには、もう少し、初歩的な技術の蓄積が必要ではないでしょうか。 もともと、そのコードでは動くわけないのでしょうから、掲示板に載せるために、相当に省いているのか加工しているのだと思います。 Sheets("評価シート").Copy after:=Sheets("評価シート") "" のクォーテーションは、どうなっているのでしょうか? ActiveSheet.Name = 氏名(回数) これも、実にエラーが発生しやすいです。 それから、 For i = Rng.Rows.Count To 1 Step -1 左から順に入れていくなら、このように逆にしたほうがよいのではないでしょうか。これは一例です。 Sub EvaluationSheetMaking()   Dim Sh1 As Worksheet   Dim Sh2 As Worksheet   Dim Rng As Range   Dim i As Long      Set Sh1 = Worksheets("社員一覧")   Set Sh2 = Worksheets("評価シート")   With Sh1     Set Rng = .Range("A2", .Range("A65536").End(xlUp).Offset(, 1))   End With      For i = Rng.Rows.Count To 1 Step -1     On Error Resume Next     Sh2.Copy After:=Sh2     With ActiveSheet       .Name = Rng.Cells(i, 2).Value       .Cells(4, 5) = Rng.Cells(i, 2).Value       .Cells(4, 3) = Rng.Cells(i, 1).Value     End With     On Error GoTo 0   Next i   Set Rng = Nothing End Sub

  • pentium100
  • ベストアンサー率45% (689/1517)
回答No.2

http://oshiete1.goo.ne.jp/qa1822561.html この辺が参考になるのかなー

  • pentium100
  • ベストアンサー率45% (689/1517)
回答No.1

>   ActiveSheet.Name = 氏名(回数) のところが怪しい気がするんですが 実際はどの行でストップしてますか? コードの該当行が反転しているはずですが シート名に設定しようとしたデータ:氏名(回数)が空っぽとかではない?

Sinogi
質問者

補足

Sheets(評価シート).Copy after:=Sheets(評価シート で停止します。 何度か実行していますが同じ行数のところで失敗になります。 そうなるとワークシートから手作業でシートコピーしようとしてもできません。 一旦エクセルを終了→エクセルのみ再起動し、(シート名が重ならないよう)データを入替えて実行すれば、その前より少ない行数で失敗します。 なぜなのか見当もつきません。

関連するQ&A

  • エクセル 実行時エラー 438

    Sheets("シート1").Column("a").Find(What:="検索文字").Row で 実行時エラー 438 オブジェクトは、このプロパティまたはメソッドをサポートしていません。 が発生する理由は、セルに検索文字がないからですか? それとも文法が間違っているからですか? Sheets("シート1").Column("a").Find(What:="検索文字").Row だとエラーになるのに、 Sheets("シート1").cells.Find(What:="検索文字").Row これだと検索文字が入ってる行番号を返します。 A列には、検索文字が入っているのに、 .Column("a")だとダメで、.cellsだと問題ない理由は何でしょうか? Column(1)にしてもエラーになります。

  • エクセル2003マクロの再編集

    Sub test() Dim 行1 As Long, 最終行 As Long, 行2 As Long Sheets("Sheet2").Cells.ClearContents Sheets("Sheet1").Activate 最終行 = Range("C65536").End(xlUp).Row 行2 = 1 For 行1 = 1 To 最終行 Sheets("Sheet2").Cells(行2, 1).Resize(1, 3) = Range(Cells(行1, 1), Cells(行1, 3)).Value Sheets("Sheet2").Cells(行2, 3).Value = Abs(Sheets("Sheet2").Cells(行2, 3).Value) If Range("A" & 行1).Value = "BBBB1" Then Sheets("Sheet2").Range("A" & 行2) = Range("A" & 行1) & "-1" Sheets("Sheet2").Cells(行2 + 1, 1).Resize(1, 3) = Range(Cells(行1, 1), Cells(行1, 3)).Value Sheets("Sheet2").Range("A" & 行2 + 1) = Range("A" & 行1) & "-2" 行2 = 行2 + 1 End If If Range("A" & 行1) = "" Then 行2 = 行2 - 1 Sheets("Sheet2").Range("C" & 行2) = Sheets("Sheet2").Range("C" & 行2) + Range("C" & 行1) End If 行2 = 行2 + 1 Next 行1 End Sub を編集したいのですが全然図りません ご指導お願いします 元データ AAAA5 9601  950 BBBB1 9660  150 ASAS9 9654  -50 AXCW5 9603  1375 以下の用にマクロで変換する用に出来たのですが 【1】 BBBB1だけではなくAAAA5も対処になったときの 追加方法です 元データは一切変更が出来ません ※フォントの変更も不可です 【2】 元データと変換後データがSheet1からSheet2になっていますが Sheet1の元は範囲はA1~C400で変換後をSheet1E1~G400にしたいのです AAAA5 9601  950  BBBB1-1 9660  150  BBBB1-2 9660  150 ASAS9 9654  50 AXCW5 9603  1375

  • エクセル2003マクロの機能追加

    Sub test() Dim 行1 As Long, 最終行 As Long, 行2 As Long Sheets("Sheet2").Cells.ClearContents Sheets("Sheet1").Activate 最終行 = Range("C65536").End(xlUp).Row 行2 = 1 For 行1 = 1 To 最終行 Sheets("Sheet2").Cells(行2, 1).Resize(1, 3) = Range(Cells(行1, 1), Cells(行1, 3)).Value If Range("A" & 行1).Font.Bold Then Sheets("Sheet2").Range("A" & 行2) = Range("A" & 行1) & "-1" Sheets("Sheet2").Cells(行2 + 1, 1).Resize(1, 3) = Range(Cells(行1, 1), Cells(行1, 3)).Value Sheets("Sheet2").Range("A" & 行2 + 1) = Range("A" & 行1) & "-2" 行2 = 行2 + 1 End If If Range("A" & 行1) = "" Then 行2 = 行2 - 1 Sheets("Sheet2").Range("C" & 行2) = Sheets("Sheet2").Range("C" & 行2) + Range("C" & 行1) End If 行2 = 行2 + 1 Next 行1 End Sub 元データ AAAA5 9601  950 BBBB1 9660  150 ASAS9 9654  -50 AXCW5 9603  1375 以下の用にマクロで変換する機能を追加したいのです AAAA5 9601  950 BBBB1-1 9660  150 BBBB1-2 9660  150 ASAS9 9654  50 AXCW5 9603  1375 宜しくおねがいします。

  • EXCEl マクロ「実行時エラー1004」について教えてください。

    EXCEl マクロ「実行時エラー1004」について教えてください。 他の方の質問も見てみましたが、それぞれの事情で違うようで分かりません。 どなたか教えていただけないでしょうか。 1.EXCELに「住所録データ」「検索結果」「ラベル」の3種シートがあります。 2.「住所録データ」から必要なものを選び、「検索結果」に表示させると、「ラベル」に結果が反映され、プリントアウトされます。 3.「検索結果」までは表示されますが、そこで下記の表示がでます。 「実行時エラー1004アプリケーション定義またはオブジェクト定義のエラーです。」 4.『デバック』を見ると下記のマクロが表示されます。  ' '一覧表のデータをレイアウトにあわせて転送 Sub ラベルへ転記(番号, 印刷位置, 複数段) Dim 用紙 As Object Sheets("検索結果").Select Set 用紙 = Sheets("ラベル") 用紙.Range("ラベル氏名") = Cells(番号 + データ開始, 氏名位置).Value + " 様" 用紙.Range("ラベル住所") = Cells(番号 + データ開始, 住所1位置).Value + " " + Cells(番号 + データ開始, 住所2位置).Value 用紙.Range("ラベル所属") = Cells(番号 + データ開始, 所属1位置).Value + " " + Cells(番号 + データ開始, 所属2位置).Value 用紙.Range("ラベル番号") = Cells(番号 + データ開始, 郵便位置).Value 用紙.Select Range("ラベル").Select Selection.Copy Cells(ラベル開始行 + (印刷位置 - 1) * ラベル行数, _ ラベル開始桁 + ラベル桁数 * (複数段 - 1)).Select ActiveSheet.Paste End Sub 5.上記「 用紙.Range("ラベル住所") = Cells(番号 + データ開始, 住所1位置).Value + " " + Cells(番号 + データ開始, 住所2位置).Value」の部分が黄色の→とラインでチェックされています。 前回このマクロを使用したあと、プリントアウトの位置を調整するため、「ラベル」のシートで、セルの高さや幅を変更したり一部削除したりしました。これが原因かもしれません。もしそうだとしたら今後このマクロは回復しないでしょうか。マクロの知識がなく質問も適切ではないかもしれませんが、どなたかお知恵を貸していただけないでしょうか。

  • エクセルマクロで改ページプレビュー

    お世話になります。 Sub 行挿入() For r = 3 To 50 If Len(Cells(r, 2)) = 13 Then Sheets("sheet2").Select Rows("1:55").Select Selection.Copy Rows("56:56").Select Selection.Insert Sheets("sheet1").Select End If Next End Sub というコードを書いたのですが、「End If」の前に(r-1)ページ目として印刷範囲を55行追加する、というコードを考えたのですがうまくいきません。教えていただけないでしょうか。

  • エクセルで、シートを非表示のままマクロを実行するには?

    エクセル初心者です。 Sheet1で、マクロの実行ボタンがあり、Sheet2で、データを編集して、 Sheet1に結果の一覧を表示させるマクロなのですが、 Sheet2は非表示のままマクロを実行したいのですが、うまくいかず、 Sheet2を表示して、実行するとうまくいくため、 一時的にシートを表示させるようにしてみたのですが、 Sheets("Sheet2").Range(Cells(2, 28), Cells(rowCnt, 37)).Insert Shift:=xlDown で、アプリケーション定義・オブジェクト定義エラーになります。 どなたかご指南下さい。 Private Sub EDITSLINF() Dim rowCnt As Long Application.ScreenUpdating = False Worksheets("製造記録一覧 (edit1)").Visible = True  Sheets("Sheet2").Range("AB2:AK300").ClearContents '追加レコード抽出&コピー&ペースト Sheets("Sheet2").Range("Q1:Z300").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range( _ "AP1:AP2"), CopyToRange:=Sheets("Sheet2").Range("AB1:AK1"), Unique:=False '既存レコードコピー&ペースト rowCnt = Sheets("Sheet2").Range("O1") Sheets("Sheet2").Range(Cells(2, 28), Cells(rowCnt, 37)).Insert Shift:=xlDown Sheets("Sheet2").Range(Cells(2, 28), Cells(rowCnt, 37)).Interior.ColorIndex = xlNone Sheets("Sheet2").Range(Cells(2, 2), Cells(rowCnt, 11)).Copy Sheets("Sheet2").Range("AB2").PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _ xlNone, SkipBlanks:=False, Transpose:=False Worksheets("Sheet2").Visible = False 'メインシートへコピー   Application.CutCopyMode = False Sheets("Sheet2").Range("AB2:AJ300").Copy Sheets("Sheet1").Range("K4").PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _ xlNone, SkipBlanks:=False, Transpose:=False End Sub

  • 実行時エラー

    先日はご回答いただきありがとうございました。 ご回答いただいた構文を採用してテストしてみましたところ、特定の操作時にエラーが発生してしまいました。 発生条件:「管理」部署のユーザー・シート3人と「総務」部署のユーザー・シート2人を用意      「管理」の管理職でログインしたあと、「総務」の管理職でログインを試みるとエラーが発生 発生エラー:実行時エラー'1004' 'Visible' メソッドは失敗しました: '_Worksheet' オブジェクト エラー発生箇所:ws.Visible = False(下から4行目) お手すきの時で構いませんので、宜しければご回答お願いいたします。 ElseIf isManage Then '管理職なら Dim i As Integer For i = 1 To login.Cells(Rows.Count, eColIndex.depcode).End(xlUp).Row On Error Resume Next 'エラートラップ開始 Set ws = Sheets(login.Cells(i, eColIndex.name).Value) 'Sheets("氏名") On Error GoTo 0 'エラートラップ終了 If login.Cells(i, eColIndex.depcode).Value = depcode Then If ws Is Nothing Then 'シートが無いなら MsgBox "ユーザーシートがありません", vbExclamation, "警告" Application.Visible = True 'ブックを表示 End End If ws.Visible = True 'ユーザーのシート表示 Set ws = Nothing ElseIf Not ws Is Nothing Then ws.Visible = False Set ws = Nothing End If Next

  • 実行時エラー1004 Pasteの失敗

    シート(式マスタ)に、それぞれの追加したいシートに合わせた式を入力した行を複数用意しておき, 行を追加したいシート(資産A)またはシート(資産B)に、以下のようなVBAを登録したボタンを置いておきます。 このシート(資産A)またはシート(資産B)のボタンを押すごとに、シート(式マスタ)に入力してあるそれぞれのシートにあった行を、1行ずつ追加されるようにしたつもりでした。 このボタンは1回目は無事動くのですが、もう一行増やそうとボタンを押すと、     実行時エラー1004      WorlsheetクラスのPasteメソッドが失敗しました と表示されます。 初めからできないのならまだわかるのですが。。 どのようにしたらいいかご教示していただけたら幸いです。 Sub 行追加() Application.ScreenUpdating = False Dim SHlast As Long '各シートの最終行を取得 With Sheets("式マスタ") Select Case ActiveSheet.Name Case "資産A" .Range("B5:FO5").Copy Case "資産B" .Range("B7:FO7").Copy End Select End With With ActiveSheet .Unprotect SHlast = .Cells(.Rows.Count, 2).End(xlUp).Row .Paste Destination:=.Range(.Cells(SHlast + 1, 2), .Cells(SHlast + 1, 171)) .Protect UserInterfaceOnly:=True End With Application.CutCopyMode = False Application.ScreenUpdating = True End Sub

  • エクセルVBA での繰り返し処理について

    エクセルVBA での繰り返し処理について 以下の作業を20回繰り返そうとしています(別シートから持ってきた値を「行列を入れ替えて」貼り付け)    Sheets("初期設定").Select Range("A6:C6").Select Selection.Copy Sheets(TS).Select Range("B4").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=True   「初期設定」シートの方は1行ずつ並んでいるので、「2回目」の「2行目」は   「 Range("A7:C7").Select」になり、   「TS」シートの20行後に貼り付けたいので、「2回目」の「5行目」は   「Range("B24").Select」 になります   これを、for ~ next を使い、以下のようにしてみましたが、上手くいきません。    For j = 6 To 26 For k = 4 To 384 Step 20 Sheets("初期設定").Select Range(Cells(j, 1), Cells(j, 3)).Select Selection.Copy Sheets(TS).Select Cells(k, 2).Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=True Next k Next j  1分程度ループし続けた後、「初期設定」シートの最終行だけが貼り付けられてしまいました。 どこをどのように直せばいいのかお教えください。 よろしくお願いいたします。

  • エクセルをバージョンアップさせたらマクロがうまくいきません

    OSはXPです エクセル2002から 2003にバージョンをあげました いままでうまくいっていたマクロが Range(Cells(1, 1), Cells(Cells(65535, 1).End(xlUp).Row, 9)).Select Selection.Copy Sheets("Sheet1").Select Sheets.Add ActiveSheet.Paste このような内容で ActiveSheet.Paste  この部分でエラーが起きます 「実行時エラー ”1004”  worksheetクラスのpasteメソッドが   失敗しました」 というメッセージがでます。 どういう対処をしたらよろしいでしょうか? ご教授ください。 (バージョンを元にに戻すなど)

専門家に質問してみよう