エクセルの範囲のコピーがうまくいかない

このQ&Aのポイント
  • エクセルにおいてシートの範囲をコピーし、他のブックのシートにコピーするVBAがうまくいきません。
  • 「実行時エラー424;オブジェクトが必要です」というエラーメッセージが表示されます。
  • 正しいオブジェクトを指定してコピーと貼り付けを行うコードを記述してください。
回答を見る
  • ベストアンサー

エクセルの範囲のコピー

はじめて質問させていただきます。 エクセルにおいてシートの範囲をコピーし、他のブックのシートにコピーする下記のVBAがうまくいきません。 「ActivateSheet.Paste」において「実行時エラー424;オブジェクトが必要です」とのエラーメッセージがでます。申し訳ございませんが、ご教示お願いいたします。 -------------------------------------------------- Dim SourceFile, TourceFile, SourceSheet, TargetSheet As String Dim i As Integer, k As Integer SourceFile = "Book1" TargetFile = "Book2" SourceSheet = "Sheet1" TargetSheet = "Sheet1" Workbooks(SourceFile).Sheets(SourceSheet).Activate Columns("A:F").Select Application.CutCopyMode = False Selection.Copy Workbooks(TargetFile).Sheets(TargetSheet).Activate ActiveSheet.Cells(1, 1).Select ActivateSheet.Paste Workbooks(SourceFile).Sheets(SourceSheet).Activate

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

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

こんにちは。 通常なら、そのマクロでも通るはずですが、それが、実体化していないファイル、つまり新規作成で作られたもので、保存していないファイルだったら、 「実行時エラー424;オブジェクトが必要です」 そういうエラーはあるかもしれませんね。 もともと、それは記録マクロですから、以下のようなマクロでは、そういう問題はないかと思います。 Sub testMacro2() Dim SourceFile, TourceFile, SourceSheet, TargetSheet As String SourceFile = "Book1" TargetFile = "Book2" SourceSheet = "Sheet1" TargetSheet = "Sheet1" With Workbooks(SourceFile) .Sheets(SourceSheet).Columns("A:F").Copy _  Workbooks(TargetFile).Sheets(TargetSheet).Cells(1, 1) End With End Sub

meilshitene
質問者

補足

さっそく、ご回答まことにありがとうございます。 >実体化していないファイル、つまり新規作成で作られたもので、保存していないファイルだったら ということで、フォルダに保存してご教示いただいたプログラムを実行したところ、「実行時エラー9:インデックスが有効範囲にありません」とエラーが発生しました。ファイルを保存する場所などに制約がありましたでしょうか?基本的なことを見落としているかもしれませんが、よろしくお願いいたします。

その他の回答 (2)

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

こんにちは。 >この場合拡張子を含めてファイルを指定しないといけないということでしょうか? すみません、私も、言われて気が付きましたが、#1 の書き込みで、実体のある・なしを書きましたが、 SourceFile = "Book1.xls" TargetFile = "Book2.xls" 両方とも、保存がしてあって、ファイルがあれば、拡張子を付けなくてはならないのですが、両方とも保存されていない状態では、 SourceFile = "Book1" TargetFile = "Book2" できるのですね。そういう例は、めったにないことかもしれませんが。

meilshitene
質問者

お礼

Wendy02さん、初心者にも関わらず、丁寧なご回答ありがとうございました。 ちょっとしたことでも、自分で気がつかないことがあるもので、助かりました。ありがとうございました。

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

こんにちは。 コードは、「標準モジュール」に登録してください。 私のマクロは、ペーストされる側は、保存をしていなくてもよいはずです。 「インデックスが有効範囲でない」というエラーは、そのブック名やシート名が実際のものとは違うということですね。 もしも、新規ブックにペーストするなら、コードが変わってきます。

meilshitene
質問者

補足

ありがとうございます。コピーをする簡単な方法がわかりました。 「標準モジュール」に登録はしなかったのですが、以下のように SourceFile = "Book1.xls" TargetFile = "Book2.xls" としたらエラーがなく、実行できました。この場合拡張子を含めてファイルを指定しないといけないということでしょうか?

関連するQ&A

  • エクセル2007VBAで新規ファイルを作る場合

    現在A社というファイルのsheet1に電気代と名前を付けたデータ、sheet2に ガス代という名前を付けたデータがあり電気代のブックからコピーして新規ファイルに貼り付けをしたいと思い下記のとおりマクロがありますが、新規ブックを開いた時常に1ではなく他に新規ブックを開いていたら2とか3になってしまいます。すると再度新規ブックに戻ってガス代を貼り付ける時2とか3tpか4とかでしたらエラーになってしまいます。 こういう場合どのように書いたら良いのでしょうか? それから最後に新規ファイルで名前を付けて保存のところまでダイアログ出すところまで 教えていただきたいのですが。 マクロ勉強始めたばかりでよろしくお願います。 Sub DGCopy() Cells.Select Selection.Copy Workbooks.Add Cells.Select ActiveSheet.Paste Sheets("Sheet1").Select Sheets("Sheet1").Name = "電気代" Windows("A社.xls").Activate Sheets("電気代").Select Cells.Select Application.CutCopyMode = False Selection.Copy Windows("Book1").Activate Sheets("Sheet2").Select Cells.Select ActiveSheet.Paste Sheets("Sheet2").Select Sheets("Sheet2").Name = "ガス代" Application.CutCopyMode = False End Sub

  • Excel 2007 マクロ 別ブックのシートをコピーする方法

    Excel 2007 マクロ 別ブックのシートをコピーする方法 別ブックのシートをコピーして アクティブなブックのシートにコピーしたいと思います。 下記マクロを作成しました。 貼り付ける際に、クリップボードに保存するかどうか 聞かれるメッセージが表示されてうまくいきません。 またもっとシンプルな書き方があればアドバイスお願いします。 Sub 取り込み() Dim wb As Workbook Set wb = Workbooks.Open("\") Sheets("Sheet1").Select Cells.Select Selection.Copy ThisWorkbook.Activate ThisWorkbook.Sheets("特定").Select ActiveSheet.Cells(1, 1).Select ActiveSheet.Paste wb.Close End Sub

  • エクセルVBAで値だけをコピーペーストする方法

    下記のマクロは、エクセルのシート「精算」のb12~bz342の範囲からからシート「集計表」のアクティブセルを始点に、空白行を除いたデーターを貼り付けます。 しかし計算式と書式を抜いた値だけを貼り付けたいので、 ActiveSheet.Pasteを ActiveSheetSpecial Paste:=xlPasteValues に書き換えたらエラーになってしまいました。 どなたか詳しい方ご教授下さい。 よろしくお願いします。 Sub 精算項目コピー() Dim 最終列 As Integer Sheets("精算").Activate 最終列 = Range("b342").End(xlUp).Row Range("b12:bz" & 最終列).Select Selection.Copy Sheets("集計表").Select ActiveSheet.Paste  ←この部分を書き換えたらエラー End Sub

  • ワークシートをコピーしたい

    下記載のサンプルマクロは「ワークシートをコピーして、追加したワークブックにコピペする」マクロなんですが、これを「ワークシートをコピーして、追加したワークシートにコピペする」にできないでしょうか? 出来るのであれば、値と書式の他に関数もそのまま貼り付けたいので御教授お願いします。 ただマクロは削除してマクロ抜きのコピペが理想です。 宜しくお願い致します。 Sub サンプル() Dim sc As Integer sc = Application.SheetsInNewWorkbook Application.SheetsInNewWorkbook = 1 ThisWorkbook.Sheets("オリジナル").Cells.Copy 'コピー Workbooks.Add 'ブック追加 Sheets("Sheet1").Range("A1").PasteSpecial Paste:=xlValues '値貼り付け Sheets("Sheet1").Range("A1").PasteSpecial Paste:=xlFormats '書式貼り付け Sheets("Sheet1").Name = "コピー" Application.CutCopyMode = False Application.SheetsInNewWorkbook = sc ActiveWorkbook.Close ThisWorkbook.Activate End Sub

  • Excel VBA連続コピー、貼付処理について

    特定のフォルダ内に格納されている複数のExcelファイルの「sheet1」シートのデータを 所定のExcelファイルにコピー&ペーストしたいのですが、うまくいきません。 (貼付先のファイルを閉じようとするとエラーが発生します。) どうすればできるようになるでしょうか? ご教授の程よろしくお願いいたします。 -------------------------------------------------------------------- Sub copy_test() Dim myPath As String Dim copyFile As String Dim pasteFile As String Dim n As Long myPath = "C:\copy\" copyFile = Dir(myPath & "*.xls*") pasteFile = "C:\paste\paste_data.xlsx" n = 2 Do Until copyFile = "" Workbooks.Open Filename:=myPath & copyFile Workbooks(copyFile).Worksheets("sheet1").Range("A2:L201").Copy Workbooks.Open Filename:=pasteFile 'Workbooks(pasteFile).Worksheets("paste_data").Active Range("B1").Select Selection.End(xlDown).Select Selection.End(xlToLeft).Select Selection.End(xlUp).Select ActiveCell.Offset(1, 0).Select ActiveSheet.Paste ActiveWorkbook.Save Workbooks(pasteFile).Close False Application.CutCopyMode = False Workbooks(copyFile).Close False n = n + 999 copyFile = Dir() Loop End Sub ---------------------------------------------------------------------------------

  • 値のコピー

    Book1.csvの(A1:M17)と(A27:Q43)の値だけをBook2.xlsのsheet1とsheet2にコピーさせたいのですが Book2.xlsに(A27:Q43)の値だけしかコピー出来ないのですがどこが間違っているのでしょうか? CSVの場合、形式が異なる為出来ないのでしょうか? ご教授よろしくお願いいたします。 Sub test() Sheets("sheet1").Select Range("A1:M17").Copy Sheets("sheet1").Select Range("A27:Q43").Copy Workbooks.Open(Filename:="C:\sample\Book2.xls").RunAutoMacros Which:=xlAutoOpen Sheets("sheet1").Range("A1:M17").PasteSpecial Paste:=xlValues Sheets("sheet2").Range("A1:Q19").PasteSpecial Paste:=xlValues Application.CutCopyMode = False Application.DisplayAlerts = False ActiveWorkbook.Save ActiveWorkbook.Close End Sub

  • エクセルで複数ファイルからコピーをする。

    すみませんが、BOOK1に複数のファイルから部分的にコピーして貼り付けるという作業をしたいのですが、ど素人なもんでわかりません。マクロで記録したモノをいじってみてるのですが、根本的にコードが分かっていなくギブアップです。  やりたいことは、フォルダーの中の970305日報1、970305日報2、970306日報1、970306日報2のようなファイルが山ほどあるのですが、 この970305の日報1と2を開き、それぞれファイルの決まった列を順番にをBook1の行へ行列を入れ替えて貼りつけていき(1日が1行)保存して閉じてから、次の日970306のデータをBOOK1の2行目に貼り付けるということをしたいのですが、どなたか教えていただければ助かります。よろしくお願いします。 Sub Macro2() Dim MyFile As String, MyPath As String Dim wb As Workbook, tb As Workbook Set tb = ThisWorkbook MyPath = tb.Path & "\" MyFile = Dir(MyPath & "*.xls", vbNormal) Application.ScreenUpdating = False Application.Calculation = xlCalculationManual Do While MyFile <> "" If MyFile <> tb.Name Then Set wb = Workbooks.Open(MyPath & MyFile) With ActiveSheet Windows("970305日報1.xls").Activate Range("B34:B38").Select Application.CutCopyMode = False Selection.Copy Windows("日報リスト.xls").Activate Range("C1").Select Selection.PasteSpecial Paste:=xlPasteAll,         Operation:=xlNone, SkipBlanks:= _ False, Transpose:=True Windows("970305日報1.xls").Activate Range("C33:C38").Select Application.CutCopyMode = False Selection.Copy Windows("日報リスト.xls").Activate Range("H1").Select Selection.PasteSpecial Paste:=xlPasteAll,       Operation:=xlNone, SkipBlanks:= _ False, Transpose:=True Application.CutCopyMode = False ActiveWorkbook.Save Windows("970305日報1.xls").Activate ActiveWindow.Close Windows("970305日報2.xls").Activate Range("B31:B36").Select Selection.Copy Windows("日報リスト.xls").Activate Range("N1").Select Selection.PasteSpecial Paste:=xlPasteAll,   Operation:=xlNone, SkipBlanks:= _ False, Transpose:=True Windows("970305日報2.xls").Activate Range("D31:D36").Select Application.CutCopyMode = False Selection.Copy Windows("日報リスト.xls").Activate Range("T1").Select Selection.PasteSpecial Paste:=xlPasteAll,   Operation:=xlNone, SkipBlanks:= _ False, Transpose:=True Application.CutCopyMode = False ActiveWorkbook.Save Windows("970305日報2.xls").Activate ActiveWindow.Close Windows("970306日報1.xls").Activate Range("B34:B38").Select Application.CutCopyMode = False Selection.Copy Windows("日報リスト.xls").Activate Range("C2").Select Selection.PasteSpecial Paste:=xlPasteAll,   Operation:=xlNone, SkipBlanks:= _ False, Transpose:=True Windows("970306日報1.xls").Activate Range("C33:C38").Select Application.CutCopyMode = False Selection.Copy Windows("日報リスト.xls").Activate Range("H2").Select Selection.PasteSpecial Paste:=xlPasteAll,   Operation:=xlNone, SkipBlanks:= _ False, Transpose:=True Application.CutCopyMode = False ActiveWorkbook.Save Windows("970306日報1.xls").Activate ActiveWindow.Close -----------------------------------------

  • VBAマクロエラー【オーバーフローしました。】

    以下のVBAマクロで突然エラーが出るようになってしまいました。 原因がわからず困っています。 どなたかご教授ください。 該当部分 :S = Range("B2").End(xlDown).Row エラーMrg:実行時エラー'6': オーバーフローしました ----------マクロ文---------- Sub 部担コード読み替え() Dim R_Count As Integer Dim P_Sheet As String Dim S As Integer 'データ取込用のファイルを開く Workbooks(D_Book).Activate Sheets("Data1").Select Columns("C:C").Select Selection.Insert Shift:=xlToRight Range("B2").Select S = Range("B2").End(xlDown).Row Range("C2:C" & S).Formula = "=SUBSTITUTE(SUBSTITUTE(RC[-1],""%"",""1""),""*"",""2"")" Range("C1").Value = "部担コード" Cells.Select Selection.Copy Selection.PasteSpecial Paste:=xlPasteValues Columns("B:B").Select Application.CutCopyMode = False Selection.Delete Shift:=xlToLeft Range("A1").Select Sheets("Data2").Select Columns("C:C").Select Selection.Insert Shift:=xlToRight Range("B2").Select S = Range("B2").End(xlDown).Row Range("C2:C" & S).Formula = "=SUBSTITUTE(SUBSTITUTE(RC[-1],""%"",""1""),""*"",""2"")" Range("C1").Value = "部担コード" Columns("G:G").Select Selection.Insert Shift:=xlToRight Range("G2:G" & S).Formula = "=SUBSTITUTE(SUBSTITUTE(RC[-1],""%"",""1""),""*"",""2"")" Range("G1").Value = "キー" Cells.Select Selection.Copy Selection.PasteSpecial Paste:=xlPasteValues Columns("B:B").Select Application.CutCopyMode = False Selection.Delete Shift:=xlToLeft Columns("E:E").Select Application.CutCopyMode = False Selection.Delete Shift:=xlToLeft Range("A1").Select End Sub

  • エクセル VBA シート名を別シートにコピー

    早速の質問ですが エクセルVBAで シート名を別シートにコピーなのですが 10個のシートを順にシート名をコピー&ペーストしたいのです。 Dim aworkbook As Workbook Dim bworkbook As Workbook Set bworkbook = ActiveWorkbook Workbooks.Add Set aworkbook = ActiveWorkbook for i=1 to 10 bworkbook.Activate Worksheets(i).Select Application.CutCopyMode = False aworkbook.Activate Worksheets(i).Select ここに入る文章がわかりません Range("A1").Select next と以上な感じで作ってみたのですが どう貼り付けして良いかわからない状況です nextでまわす以上変数でなければだめなんでしょうけれども 構文が思いつきません。 皆様よろしくお願いいたします。

  • 【エクセルVBA】「インデックスが有効範囲にありません」というエラーがでます

    こんにちは。VBA初心者ですが、下記コードを実行すると エラーが出てしまいました。 シート(シート1)のセルから別シート(シート2)のセルに 値のみコピーするVBAを組んでいます。 適宜、シート1に入力したものを読みこませていきたいので 変数を使用しています。 ------------------------------------------------------------- Sub セルのコピー() Dim X As Integer X = 3 Y = 2 Do While Cells(X, "A").Value <> "" Sheets("シート1").Cells(X, "A").Copy Sheets("シート2").Activate Sheets("シート2").Cells(Y, "F").PasteSpecial _ Paste:=xlPasteValues ⇒エラー対象 Application.CutCopyMode = False X = X + 1 Y = Y + 1 Loop End Sub ------------------------------------------------------------ つまり、シート1のA3セルを先頭にA4,A5,A6・・・と続くセルの値 をシート2のF2を先頭としたセル(以下、F3,F4・・・)に値のみコピー していきたいのですが。。 実行すると「インデックスが有効範囲にありません」というエラーが でます。デバック対象は上記、「⇒エラー対象」の構文です。 変数の設定の仕方がおかしいのでしょうか。。 ご教示のほどよろしくお願いいたします。

専門家に質問してみよう