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

このQ&Aのポイント
  • 複数のExcelファイルのデータを所定のExcelファイルにコピー&ペーストする方法を教えてください。
  • 特定のフォルダ内に格納されているExcelファイルの「sheet1」シートのデータをコピーして、別のExcelファイルに貼り付ける方法を教えてください。
  • Excel VBAを使用して、特定のフォルダ内に格納されている複数のExcelファイルの「sheet1」シートのデータを一括でコピー&ペーストする方法を教えてください。
回答を見る
  • ベストアンサー

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 ---------------------------------------------------------------------------------

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.1

あれあれ、ごめんなさい、非常に類似のご相談を繰り返し投稿して一向に解決しない別のご質問者さんと、勘違いしていたようです。 それで、あなたの前回のご相談では「A2:L1000を漏れなくコピー貼り付ける」というお話になっていましたが、今回あなたが作成したマクロは「実際には1000行までぎっちりデータが詰まってるわけではない」という意図になっています(残念ながらマクロは間違っていますけど)。事実はどうなんでしょうか? とりあえず今回のあなたが作成したマクロをベースにすると: sub macro1()  dim myPath as string  dim myFile as string  dim w as workbook  mypath = "c:\copy\"  myfile = dir(mypath & "*.xls*")  set w = workbooks.open("c:\paste\paste_data.xlsx")  do until myfile = ""   workbooks.open mypath & myfile   activeworkbook.worksheets("Sheet1").select   range("A2:L201").copy w.worksheets("paste_data").range("A65536").end(xlup).offset(1)   activeworkbook.close false   myfile = dir()  loop  w.close true end sub

candle1
質問者

お礼

できました! 回答ありがとうございます。 >それで、あなたの前回のご相談では「A2:L1000を漏れなくコピー貼り付ける」 >というお話になっていましたが、今回あなたが作成したマクロは「実際には1000行 >までぎっちりデータが詰まってるわけではない」という意図になっています(残念ながら >マクロは間違っていますけど)。事実はどうなんでしょうか? →当初は、決まった範囲のコピー&貼り付けであったのですが、実際来たら、ファイルによって1、2行多いものもあったため、内容を変えました。 (今回投稿したマクロでは、200行でしたが、実際は1000行~1002行でした。) ほんとにありがとうございます。助かりました。

関連するQ&A

  • Excel vba selectが効かない

    2と3の2つのエクセルファイルがあります。縦の列を新しいファイルの横の行に コピーしていきたいプログラムです。 2のファイルの1シート目の"C8:C25" 3のファイルの1シート目の"C9:C65" を新しい1のファイルの1シート目の1行目にコピーするプログラムを 作っていますが1シート目はpasteされるのですが 3のファイル2シート目からselectの指定が"C9:C65"ではなく、B9からQ65の指定になってしまい思ったコピーができません(★のところ)、1シート目はうまくいっているのでどうして3のファイルの2シート目のからうまくいかないかわかりません。 5シートまででテストをしているのですが実際は各々255シートありもってくる列も 12列あります。とりあえずCの列だけ5シートで試してみています。 Dim i As Long Dim N As Long i = 1 N = 1 Do While i <= 5 ''C列''' Workbooks(2).Worksheets(i).Activate   '2のファイル Worksheets(i).Range("C8:C25").Select   'もってくるところ Selection.Copy Workbooks(1).Worksheets(1).Activate   '1新しいファイル Range("C" & N).Select   '貼り付けるところ Selection.PasteSpecial Paste:=xlPasteValues, operation:=xlNone, skipblanks:=False, Transpose:=True Workbooks(3).Worksheets(i).Activate   '3のファイル Workbooks(3).Worksheets(i).Range("C9:C65").Select  '★もってくるところ Selection.Copy Workbooks(1).Worksheets(1).Activate   '1新しいファイル Range("U" & N).Select   '貼り付けるところ Selection.PasteSpecial Paste:=xlPasteValues, operation:=xlNone, skipblanks:=False, Transpose:=True i=i+1 N=N+1 LOOP

  • エクセルの範囲のコピー

    はじめて質問させていただきます。 エクセルにおいてシートの範囲をコピーし、他のブックのシートにコピーする下記の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

  • EXCELのVBAについて

    マクロのボタンで内容を削除する様に設定した所、 Dim re As Integer Sheets("投入シート").Select re = MsgBox("入力データをクリアします。" & vbCrLf & vbCrLf & "よろしいですか?", vbOKCancel, "クリア確認") If re <> vbCancel Then Sheets("投入シート").Select ActiveSheet.Unprotect Range("a1:c30").Select Selection.Copy Application.CutCopyMode = False Selection.Copy Sheets("work").Select Range("A1").Select ActiveSheet.Paste Sheets("投入シート").Select ActiveSheet.Unprotect Range("c4:c30").Select Selection.ClearContents Range("f31").Select Selection.Copy Range("c9").Select ActiveSheet.Paste Range("f33").Select Selection.Copy Range("c11").Select ActiveSheet.Paste Range("f32").Select Application.CutCopyMode = False Selection.Copy Range("c14").Select ActiveSheet.Paste Range("c4").Select Application.CutCopyMode = False 'ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True End If Sheets("投入シート").Select Range("c4").Select End Sub この様に入力したのですがセルのC11の計算式だけセル番号が消えてしまいます。 どうしてでしょうか?ご指導をお願いします。

  • VBAを実行するとエクセルが落ちる

    同一フォルダ内にあるCSVデータを一つのエクセルにワークブックにまとめるため CSVデータを開いて、各シートに値を貼り付けるVBAを作成しました デバックモードで1行毎に実行するとエクセルが落ちることはありませんが 普通に実行するとエクセルが閉じてしまいます 原因が分からないためご指摘いただけると幸いです Win7のOffice2013です。 Sub contents() Sheets("01").Select Sheets("01").Cells.Select Selection.ClearContents Dim ShA As Worksheet Dim FileA As String Set ShA = ThisWorkbook.Sheets("01") ChDir "C:\Users\Public\Documents" FileA = "C:\Users\Public\Documents\01.csv" If FileA <> "False" Then Workbooks.OpenText Filename:=FileA, StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlTextQualifierNone, Comma:=True ActiveSheet.Cells.CurrentRegion.Copy Destination:=ShA.Range("A1") ActiveWorkbook.Close False End If Set ShA = Nothing Sheets("02").Select Sheets("02").Cells.Select Selection.ClearContents Dim ShB As Worksheet Dim FileB As String Set ShB = ThisWorkbook.Sheets("02") ChDir "C:\Users\Public\Documents" FileB = "C:\Users\Public\Documents\02.csv" If FileB <> "False" Then Workbooks.OpenText Filename:=FileB, StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlTextQualifierNone, Comma:=True ActiveSheet.Cells.CurrentRegion.Copy Destination:=ShB.Range("A1") ActiveWorkbook.Close False End If Set ShB = Nothing Sheets("03").Select Sheets("03").Cells.Select Selection.ClearContents Dim ShC As Worksheet Dim FileC As String Set ShC = ThisWorkbook.Sheets("03") ChDir "C:\Users\Public\Documents" FileC = "C:\Users\Public\Documents\03.csv" If FileC <> "False" Then Workbooks.OpenText Filename:=FileC, StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlTextQualifierNone, Comma:=True ActiveSheet.Cells.CurrentRegion.Copy Destination:=ShC.Range("A1") ActiveWorkbook.Close False End If Set ShC = Nothing End Sub

  • エクセル VBA 繰り返し コピー貼り付け

    以下を繰り返し作業をOffsetを使用して行いたいのですがどうすればいいでしょうか? Sheets("Sheet1").Select Range("A1:C1").Select のA1:C1以下へA1000:C1000ぐらいあります。 Sheets("Sheet2").Select Range("G1").Select は貼り付けたセル3つの数字の組み合わせで公式に使う計算期間がまちまちですので公式を張り付けたり出来ません。 D1の解を heets("Sheet1").Select Range("D1").Select に貼り付けてA1:C1以下1000までの結果を評価出来るようにしたいのですが! ' Macro1 Macro Sheets("Sheet1").Select Range("A1:C1").Select Selection.Copy Sheets("Sheet2").Select Range("D1").Select ActiveSheet.Paste Range("G1").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet1").Select Range("D1").Select ActiveSheet.Paste Range("A2:C2").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet2").Select Range("D1").Select ActiveSheet.Paste Range("G1").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet1").Select Range("D2").Select ActiveSheet.Paste Range("A3:C3").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet2").Select Range("D1").Select ActiveSheet.Paste Range("G1").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet1").Select Range("D3").Select ActiveSheet.Paste End Sub よろしくおねがいします。

  • VBAで値だけコピー

    EXCEL VBAで別ファイルの値をコピーして貼り付けをしているのですが、セルの中の一部のみを貼り付けしたいと思いますが、 どのようにしたらいいのでしょうか? 関数では取り出すことができたのですが、できればVBAの中で処理できればと思っています。 =IFERROR(MID(Z2,FIND("6",Z2),FIND(" has",Z2)-FIND("6",Z2)),"") やりたいこと 1.左から見て6~空白までの値のみを貼り付けしたい 2.エラーの時は空白にしたい Sub SO_Copy() Dim ws As Worksheet Set ws = Worksheets("Sheet1") Dim FilePath, FileName As String 'C8&C9にファイルパス/ファイル名を入力 FilePath = ws.Range("C8").Value & "\" & ws.Range("C9").Value FileName = ws.Range("C9").Value Workbooks.Open FilePath 'Z2~コピーして、"メール送信.xlsm"のD11以降に値だけ貼り付け Range("Z2", Range("Z2").End(xlDown)).Copy Windows("メール送信.xlsm").Activate Range("D11").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Workbooks(FileName).Close End Sub

  • EXCEL VBAについて質問です。

    EXCEL VBAについて質問です。 アドバイスを宜しくお願い致します。 現状開いているシートの日付を参照し、新しく開いたシートの日付とあっているセル下部に 貼り付けを行おうとしています。 条件的にはあっている気がしますが、なぜか貼りつきません。 アドバイス宜しくお願いたします。 元シート日付 2014/06/01 添付画像が貼り付け先のEXCELとなっております。 以上宜しくお願い致します。 Dim s As Long Dim wb As String Dim dy2 As String Dim a As String  dy2 = Range("M1")    元EXCELの日付を参照  Range("M5:R41").Copy  元EXCELのデータをコピーする。 wb = "D:\Documents and Settings\ssk\デスクトップ\まとめ.xls"   ’ Workbooks.Open (wb)    新しいブックを開く。 Sheets("data").Select    対象のシートを選択 For n = 2 To 187 Step 6 If Cells(1, n).Value = dy2 Then 元ブックの日付と新しく開いたブックの日付を参照しあっていれば下記のようにはりつけする。 Cells(3, n).Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Application.CutCopyMode = False End If Next 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 -----------------------------------------

  • エクセルで繰り返し同じ作業をしたい

    仕事でDドライブの中のフォルダにエクセルのシートが100種類位入っています。それらのエクセルシートに毎日同じ作業をしなければならないのですが、(エクセルを開いて行う作業は各シート共通です)そのマクロの作り方を教えていただけないでしょうか?ちなみに Workbooks.Open Filename:="D:\業務\あ.xls" Range("D9").Select Selection.Copy Range("E9").Select ActiveSheet.Paste Application.CutCopyMode = False ActiveWorkbook.Save ActiveWindow.Close Workbooks.Open Filename:="D:\業務\い.xls" Range("D9").Select Selection.Copy Range("E9").Select ActiveSheet.Paste Application.CutCopyMode = False ActiveWorkbook.Save ActiveWindow.Close Workbooks.Open Filename:="D:\業務\う.xls" Range("D9").Select Selection.Copy Range("E9").Select ActiveSheet.Paste Application.CutCopyMode = False ActiveWorkbook.Save ActiveWindow.Close      その後もまだまだ続きます。 というマクロの記録を使って作ってはいるものの、やたらと長くなってしまいます。VBAの知識がない初心者なのですが、いい方法があれば教えていただけないでしょうか?

  • ファイルを開き、シートをコピーするマクロについての質問です。

    VBA初心者の者です。解決法が分からないのでよろしくお願いします。 以下のことがマクロを用いて行いたいと思ってます。 (1)まず、シート1からnまであるデータの入ったファイル【以下、ファイル1】を指定して開き、それを別のシート1からnまであるファイル【以下、ファイル2】を指定して開きます。 (2)ファイル1の各々のシートからファイル2のおのおののシートにデータをコピーしたいと思っています。ただし、コピーするのは、ファイル1のシート1からファイル2のシート1、ファイル1のシート2からファイル2のシート2に、・・・、ファイル1のシートnからファイル2のシートnまでループさせたいです。 一応、自分で以下のようにマクロを組んでみましたが、上手く動きません。どこが違うのかをご指摘いただきたいです。 よろしくお願いします。 Public sh As Integer Public sht_n As Integer Public Lst As Integer Sub Macro1() Dim file1 As String file1 = Application.GetOpenFilename(Title:="ファイルを選択して下さい") If file1 = "" Or file1 = "false" Then MsgBox "ファイルOPEN不可", vbCritical End Else Workbooks.Open Filename:=FN1 End If Dim file2 As String file2 = Application.GetOpenFilename(Title:="ファイルを選択して下さい") If file2 = "" Or file2 = "false" Then MsgBox "ファイルOPEN不可", vbCritical End Else Workbooks.Open Filename:=FN2 End If sht_n = ActiveWorkbook.Sheets.Count Lst = sht_n + 1 For sh = 1 To sht_n Call CpSh(sh) Next sh End Sub Sub CpSh(s) Dim st As String st = Sheets(s).Name Sheets(st).Select Workbook("FA1").Activate Sheets("st").Select Cells.Select Selection.Copy Workbook("FA2").Activate Sheets("st").Select Range("A1").Select ActiveSheet.Paste End Sub