VBAで実行時エラーとコピーの仕方

このQ&Aのポイント
  • VBAを使用して実行時エラーが発生し、拡張子がxlsmの10個のシートを拡張子がxlsxのブックにコピーする方法がわかりません。
  • シートのコピー方法を教えてください。
  • 実行環境はWindowsXPSP3で、EXCELは2010を使用しています。
回答を見る
  • ベストアンサー

VBAで実行時エラーとコピーの仕方

始めまして、宜しくお願い致します。拡張子がxlsmの中に名前のついた10個のsheetがあります。この10個のsheetを拡張子がxlsxのBookにコピーしたいのですが、実行時エラーが出ます。作成したマクロは Option Explicit Option Base 1 Public Sub シートの纏め() Dim i As Long Dim mySheetCnt As Long Dim mySheetName() As String Dim ws As Workbook Dim s As Worksheet '========================================================================== mySheetCnt = ThisWorkbook.Sheets.count ReDim mySheetName(1 To mySheetCnt) For i = 1 To mySheetCnt - 3 mySheetName(i) = Sheets(i).Name 'ここで実行時エラーが出ます。 'MsgBox "変数mySheetName(" & i & ")=" & mySheetName(i) Next i '========================================================================== Dim EffectiveRow As Long Dim EffectiveColumn As Long EffectiveRow = Range("B65536").End(xlUp).Row 'MsgBox "EffectiveRow = " & EffectiveRow & "" EffectiveColumn = Cells(4, 256).End(xlToLeft).Column 'MsgBox "EffectiveColumn = " & EffectiveColumn & "" '========================================================================== 'MsgBox "デフォルトで" & Application.SheetsInNewWorkbook & "枚作成されます" Application.SheetsInNewWorkbook = 1 Workbooks.Add '========================================================================== For i = 1 To mySheetCnt - 3 If mySheetCnt = 11 Then GoTo Label1 MsgBox "mySheetName(i) = " & mySheetName(i) & "" Workbooks("Book1.xls").Worksheets("sheet1").Range("A4").Select Next i Label1: End Sub です。ここでコメント欄にエラーと書かれた部分で実行時エラーが起こります。エラーメッセイジは、 実行時エラー「'9'インデクスが有効範囲にありません。」と出ます。また、拡張子がxlsmにある10個名前のついたsheetを拡張子xlsxを作り、1つのsheetに纏めたいのですが、方法が判りません。纏め方は、10個名前のついたsheetから、新たに作ったsheetに下から上に順番にコピーしたいのですが、方法がわかりませ。どなたかご教授して頂きたく宜しくお願い申し上げます。実行環境はWindowsXPSP3でEXCELは2010を使っております。

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

  • ベストアンサー
  • queuerev2
  • ベストアンサー率78% (96/122)
回答No.2

試しているうちに一応エラーを再現できました。 環境はWindows XP SP3, Excel 2007で、マクロは標準モジュールに入れました。 マクロ実行時に他のブックがアクティブになっていて Sheets(i).Nameでそのブックを見に行っている可能性があります。 対策ですが、 mySheetName(i) = Sheets(i).Name 'ここで実行時エラーが出ます。 を mySheetName(i) = ThisWorkbook.Sheets(i).Name に変更したところ、この行があるFor Nextループが完了するところまでは行きました。 (その後は試していませんが・・・)

19560816
質問者

お礼

ご回答頂き本当jに有難う御座います。しかし、別の方法で解決させて頂きました。何卒今後tも宜しくお願い申し上げます。

その他の回答 (1)

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

空シートにデータをコピーする「シートのコピー」もいいけど、 シートそのものをブック間でコピーor移動させてはどうですか? 「マクロの記録」でシートそのものをブック間でコピーor移動させて、 VBAのコードでどう記述すれば良いかを確認できますよ。

関連するQ&A

  • VBAで複数シートを新たに作成したBookにコピー

    いつも大変お世話になります。動作環境は、WindowXPSP3、EXCEL2010です。10個の名前付きsheetがあります。Book.xlsmから新たにBook1.xlsxを作成してこのBook1.xlsxに1個のsheet名が「sheet1」を作成します。そして、Book.xlsmにある10個の名前付きsheetをBook1.xlsxに作成した一個のsheet1にコピーします。コピーの仕方は、Book.xlsmの一番左端のsheetから順番にBook1.xlsxに作成した1個のsheet1に下から上に向かってコピーしていきます。最終的には、10個の名前付きsheetが纏められます。後一つの条件は、一番最初にコピーするシートには4行目に項目書かれております。なので、一番最初にコピー4行目だけはコピーして、後は、5行目からコピーしたく、下記のマクロを作成しました。 Option Explicit Option Base 1 Public Sub シートの纏め() Dim i As Long Dim mySheetCnt As Long Dim mySheetName() As String Dim ws As Workbook Dim s As Worksheet '========================================================================== mySheetCnt = ThisWorkbook.Sheets.count ReDim mySheetName(1 To mySheetCnt) For i = 1 To mySheetCnt - 3 mySheetName(i) = Sheets(i).Name 'MsgBox "変数mySheetName(" & i & ")=" & mySheetName(i) Next i '========================================================================== Dim EffectiveRow As Long Dim EffectiveColumn As Long EffectiveRow = Range("B65536").End(xlUp).Row 'MsgBox "EffectiveRow = " & EffectiveRow & "" EffectiveColumn = Cells(4, 256).End(xlToLeft).Column 'MsgBox "EffectiveColumn = " & EffectiveColumn & "" '========================================================================== Dim Book1 As Workbook For i = 1 To mySheetCnt - 3 If mySheetCnt = 11 Then GoTo Label1 'MsgBox "mySheetName(i) = " & mySheetName(i) & "" 'MsgBox "デフォルトで" & Application.SheetsInNewWorkbook & "枚作成されます" Workbooks.Add Application.SheetsInNewWorkbook = 1 Sheets("sheet1").Select Book1 = ActiveWorkbook.Name Workbooks("Bookxlsm").Worksheets("mySheetName(i)").Range("B4:AF58").Copy _   Workbooks("Book1.xls").Worksheets("sheet1").Range("B4") ⇐ここで、実行時エラーが出ます。 Next i Label1: End Sub しかし、実行時エラーで止まってしまいます。もう、1週間格闘しております。どなたか、何卒ご教授して頂きたく、宜しくお願い申し上げます。

  • VBA実行時のエラー

    下記のプログラムは私が作った物では無いのですが、作った方と連絡をとる事が出来なくなってしまった為、質問させて頂きます。 このプログラムをシートから実行した所 エラー:400『既にフォームは表示されています。モーダルにできません。』 なるものが表示されてしまいます。 またコードを記述する所から実行しますと 実行時エラー:1004『アプリケーション定義またはオブジェクト定義のエラー』 となってしまいます。 私の努力が足りないのは重々承知ですが、解決する事が出来ません。 皆様のお力を借りることが出来たらと思い投稿しました。 宜しくお願い致します。 Sub syoutotumen() Dim i As Long Dim j As Long Dim k As Long Dim kyori As Long Dim n As Integer n = 1 i = 1 j = 1 k = 1 Const cnsYEN = "\" Dim xlAPP As Application Dim objWBK As Workbook Dim strPATHNAME As String Dim strFILENAME As String strPATHNAME = "C:\Documents and Settings\tata41\デスクトップ\画像処理\" If strPATHNAME = "" Then Exit Sub strFILENAME = Dir(strPATHNAME & "dem******", vbNormal) If strFILENAME = "" Then MsgBox "このフォルダにはExcelワークブックは存在しません" Exit Sub End If Set xlAPP = Application With xlAPP .ScreenUpdating = False .EnableEvents = Fales .EnableCancelKey = xlErrorHandler .Cursor = xlWait End With Set WS1 = Worksheets("sheet1") Range("A1") = "0" Range("A2") = "1" Range("A1:A2").Select Selection.AutoFill Destinaton:=Range("A1:A512") Do While strFILENAME <> "" DoEvents If swESC = True Then If MsgBox("ESCが押されました。ここで終了しますか?", vbInformation + vbYesNo) = vbYes Then GoTo Button1_Click_Exit Else swESC = False End If End If xlAPP.StatusBar = trFILENAME & "処理中..." Set objWBK = Workbooks.Open(Filename:=strPATHNAME & cnsYEN & strFILENAME, UpdateLinks:=False, ReadOnly:=True) Do If Cells(i, 2) = 255 Then Exit Do i = i + 1 Loop Do If Cells(j, 3) = 255 Then Exit Do j = j + 1 Loop Do If Cells(k, 4) = 255 Then Exit Do k = k + 1 Loop kyori = (i + j + k - 21) / 3 WS1.Cells(n, 2) = kyori n = n + 1 i = 1 j = 1 k = 1 objWBK.Close savechanges:=False strFILENAME = Dir Loop GoTo Button1_Click_Exit Button1_Click_ESC: If Err.Number = 18 Then swESC = True Resume ElseIf Err.Number = 1004 Then Resume Next Else MsgBox Err.Description End If Button1_Click_Exit: With xlAPP .StatusBar = False .ScreenUpdating = True .EnableEvents = True .EnableCancelKey = xlInterrupt .Cursur = xlDefault Set objWBK = Nothing Set xlAPP = Nothing End With End Sub

  • 別のブックへ貯蓄転記する方法を教えてください。

    請求書をエクセルで作ることになりました。 請求書自体はできたのですが、 請求書内容を別のブックに貯蓄保存がどうしてもできません。 ブック「A」のM1~R1のみが転記対象。VLOOKUPを使ってデータをひいています。 ブック「B」のA3~F3に貯蓄&転記したいと考えています。 色々なサイトを見て、下記のコードを作ったのですが、貯蓄できません・・・ (上書保存のような状態になります) 初心者のため、何が間違っているのかわかりません。 ご教授いただければと思います。 よろしくお願いいたします。 Sub SAVE() Const Dest = "C:\Users\P\Desktop\Y\B.xlsx" Dim fromR As Long Dim fromRMax As Long Dim toR As Long Dim toRMax As Long '?????? toRMax = Workbooks("B.xlsx").Worksheets("Sheet1").Range("A65536").End(xlUp).Row fromRMax = Workbooks("A.xlsm").Worksheets("Sample").Range("A65536").End(xlUp).Row '?? For fromR = 2 To fromRMax 'Date Workbooks("B.xlsx").Worksheets("Sheet1").Cells(toRMax + fromR - 1, 1).Value = _ Workbooks("A.xlsm").Worksheets("Sample").Cells(fromR, 13).Value 'No. Workbooks("B.xlsx").Worksheets("Sheet1").Cells(toRMax + fromR - 1, 2).Value = _ Workbooks("A.xlsm").Worksheets("Sample").Cells(fromR, 14).Value 'Sub Workbooks("B.xlsx").Worksheets("Sheet1").Cells(toRMax + fromR - 1, 3).Value = _ Workbooks("A.xlsm").Worksheets("Sample").Cells(fromR, 15).Value '13% Workbooks("B.xlsx").Worksheets("Sheet1").Cells(toRMax + fromR - 1, 4).Value = _ Workbooks("A.xlsm").Worksheets("Sample").Cells(fromR, 16).Value '5% Workbooks("B.xlsx").Worksheets("Sheet1").Cells(toRMax + fromR - 1, 5).Value = _ Workbooks("A.xlsm").Worksheets("Sample").Cells(fromR, 17).Value 'Total Workbooks("B.xlsx").Worksheets("Sheet1").Cells(toRMax + fromR - 1, 6).Value = _ Workbooks("A.xlsm").Worksheets("Sample").Cells(fromR, 18).Value Next fromR End Sub

  • Excel VBA 実行時エラー'1004':

     どちらの処理がより高速であるのかを調べるため、以下の2つのVBAを試作致しました。 Sub Macroコピペ乱数() 'コピペ乱数 Sheets("Sheet4").Select Range("A1:A99999").Formula = "=RAND()" Columns("A").Value = Columns("A").Value Range("B1").Select End Sub 及び Sub Macro繰り返し乱数() '繰り返し乱数 Dim i As Long Randomize Sheets("Sheet4").Select For i = 1 To 99999 Range("A" & i).Value = Rnd Next i Range("B1").Select End Sub  処が、これらのVBAを実際に動作させ様としますと、どちらの場合においても「Microsoft Visual Basic」ダイアログボックスが開いて 「実行時エラー'1004': 'Range'メソッドは失敗しました:'_Global'オブジェクト」 と表示されてしまいます。  さりとて、 Sub Macroコピペ乱数() 'コピペ乱数 Sheets("Sheet4").Select ActiveSheet.Range("A1:A99999").Formula = "=RAND()" Columns("A").Value = Columns("A").Value Range("B1").Select End Sub 及び Sub Macro繰り返し乱数() '繰り返し乱数 Dim i As Long Randomize Sheets("Sheet4").Select For i = 1 To 99999 Range("A" & i).Value = Rnd Next i Range("B1").Select End Sub 或いは Sub Macro繰り返し乱数() '繰り返し乱数 Dim i As Long Randomize Sheets("Sheet4").Select For i = 1 To 99999 Range(Cells(i, 1)).Value = Rnd Next i Range("B1").Select End Sub 等としましても、今度は 「実行時エラー'1004': アプリケーション定義またはオブジェクト定義のエラーです。」 となってしまいます。  どの部分がどの様に悪いのでしょうか?  そして、どの様に修正すれば良いのでしょうか?  尚、使用しておりますExcelのバージョンはExcel2010です。

  • EXCEL VBA で実行時エラーが出ます。

    こんばんは。 エクセルのA列の1~40000行にhttp://www.google.co.jpへのリンクを設定する単純なコードですが、毎回65530行まで行くと「実行時エラー'1004'」が発生します。 (65530はInteger型の倍数に近いかと思いますが、どうなんでしょうか?) 環境はMacのブートキャンプでWindows10Home、Office365の最新版にアップデートしてあります。 よろしくお願いします。 Sub test() Dim i As Long For i = 1 To 80000 ActiveSheet.Hyperlinks.Add Anchor:=Cells(i, 1), _ Address:="http://www.google.co.jp", _ TextToDisplay:="■" Next i MsgBox "完了" End Sub 通報する

  • VBAで実行時エラー1004が出てしまう

    実行時エラー1004で「申し訳ございません。が見つかりません。名前が変更されたか、移動や削除がおこなわれた可能性があります。」と表示されてしまう。 あるフォルダ内にある複数のファイルから、作成日・更新日が最新のファイルのシートを作業中のブックにコピーするVBAなのですが上記のエラーが出てしまい原因が分かりません。 VBA初心者なので基本的なことかもしれませんがアドバイスよろしくお願い致します。 Sub コピー() Dim FileTime As Date Dim MaxTime As Date Dim FileName As String Dim MaxFileName As String With CreateObject("WScript.Shell") 'カレントフォルダを指定 .CurrentDirectory = "C:\Users\○○\Desktop\○○\○○\○○\" End With FileName = Dir("*.xlsx") 'ワイルドカードで拡張子「xlsx」ファイルを取得 Do While FileName <> "" 'ファイルを取得出来なくなるまでループ FileTime = FileDateTime(FileName) '取得したファイルの日時を取得 If FileTime > MaxTime Then '時間を比較 MaxTime = FileTime '日付が大きい場合は格納 MaxFileName = FileName '日付が大きい場合はファイル名を格納 End If FileName = Dir() Loop ShCount = ThisWorkbook.Worksheets.Count '実行したファイルのシート数を取得 Workbooks.Open MaxFileName ←ここでエラーが出る Worksheets(2).Copy after:=ThisWorkbook.Worksheets(ShCount) 'シートの2つ目を指定して末尾に追加 Workbooks(FileName).Close savechanges:=False '取得したファイルを閉じる End Sub

  • VBAでsheetのコピー

    ご回答有難う御座いました。補足説明を致します。動作するとこまでは、出来たのですが、一点変更しました。:=のコピーの所でデバッグすると、エラーになるので、=だけにしました。すると動作するのですが、新しいsheetの名前が、コピー元のsheet名になります。そして、MsgBoxを入れると、エラーになります。また、1sheetだけがコピーされます。大変恐縮ですが、もう一度ご教授願います。補足説明なりますが、やりたい事は、拡張子がxlsmの中に名前のついた10個のsheetがあります。この10個のsheetを拡張子がxlsxのBookにコピーしたいのですが、このBook1のsheetをVBAから新に作成しBook2のsheet1に纏めたいのですが、纏め方は、Book2のsheet1の下から上に10sheetをコピーして、条件としてBook2のsheet1の名前は、固定で構いません。Book1の一番初めのsheetにコピーする時だけ3行目にある見出しだけは、Book2のsheet1に付けたく。それ以外のBook1のsheetは、デターだ4行目以降をコピーしたいのですが、また、コピーしたいsheetの範囲に列は、A1~AFで列は3~62までです。マクロはご教授頂いた、下記通りです。 Sub macro1() Dim i As Long Dim w0 As Workbook Dim s As Worksheet Set w0 = ActiveWorkbook '1枚目シートから貼り付け先のブックを作る w0.Worksheets(1).Copy Set s = ActiveSheet '2枚目以降のデータをコピーする For i = 2 To w0.Worksheets.count With w0.Worksheets(i) .Range("A4:AF" & .Range("A65536").End(xlUp).Row).Copy Destination = s.Range("A65536").End(xlUp).Offset(1) End With Next i End Sub これを先ほど書きました、マクロを教えて頂けませんでしょうか?何せ、マクロ初心者なので、msm相談箱がたよりです。何卒マクロを教えて頂きたく宜しくお願い申し上げます。

  • vbaエラーの原因

    先ほどまで動いていたのですが、保存後にエラーとなりました。 実行時エラー1004または、マクロ実行時にエラー400と表示されます。 どこが変わったのか、自分でもわからず、苦戦しています。 シート2(左から2番目)に氏名と読み取りパスワードが記載されています。 それをつかって、氏名をファイル名としたエクセルファイルを読み込ませ、 印刷をさせるまでの一連の動作となります。 --- Sub printcode() Dim wbk As Workbook Dim targetRange As Range Dim i As Long Set targetRange = ThisWorkbook.Worksheets(2).Range("A1").CurrentRegion For i = 2 To targetRange.Rows.Count Set wbk = Workbooks.Open(targetRange.Cells(i, 1).Value & ".xls", Password:=targetRange.Cells(i, 2).Value) Sheets("Sheet1").PrintPreview 'PrintOut wbk.Close Set wbk = Nothing Next i End Sub --- 印刷実行前に動作確認として、プレビューコマンドを使用しています。 どの辺にエラーがあるのか、一つずつ確認しているのですが、おそらく前半と思われます。 ご指摘いただけますでしょうか。よろしくお願いいたします。

  • エクセルVBAで非アクティブブックのRow取得

    先ほどの質問の文章がおかしかったので再度質問させていただきます。 非アクティブブックの最終行のRowを取得するマクロが xls形式のファイルだと動いていたのですが、xlsm形式に変更後、エラーになってしまいました。 これは仕様の変更によるものなのでしょうか? Activeteせずに対処する方法があれば教えて頂きたいです。 マクロを実行しているのは"2.xlsm"で、 このファイルがアクティブの状態で "1.xls"が非アクティブです。 "2.xls"のファイルだとエラーにならないのに "2.xlsm"のファイルだとエラーになってしまいます。 Sub ボタン1_Click() Dim 最終行 As Long 最終行 = Workbooks("1.xls").Worksheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row MsgBox 最終行 End Sub

  • vbaマクロ 実行時エラー '91'について教えてください

    下記のマクロで、ファイル指定保存をする時に "実行時エラー91 オブジェクト変数またはWithブロック変数が設定されていません”がでます。 やりたいのは、選択したセルの1番目をファイル名として 保存をしたいのですが、うまくいきません。 どうしたらよいのでしょうか? Sub Macro1() Dim セル As Object Dim i As Long  i = 1  For Each セル In Selection   Worksheets("Sheet2").Cells(1, i).Value = セル     i = i + 1  Next ActiveWorkbook.SaveAs Filename:="D:\TEST\" & セル & ".xls" End Sub

専門家に質問してみよう