2016-06-24 3 views
-1

すべてのデータを1つの行にまとめて1つのマスターファイルに入れ替える必要があるデータを含む複数のファイルがあります。複数のファイルを開き、VBAのマスターファイルにデータをコピーするためのループを作成する

私は私が持っているコードは、これまでどんな意味がありませんので、もし、それに

を変更すること自由に感じなさい、私はこの「ループすべてのExcelファイルを見つけることができたプログラミングにおける完全なnoobのですコードは完全に正常に動作します。フォルダ内の各ファイルを個別に開き、閉じてから、次のファイルを開き、そのフォルダ内のすべてのファイルを通過するまで閉じます。

しかし、ループ内に「コピー&ペーストデータ」コードループを挿入したいと思います。だから、何が起こる必要があります、コードは、フォルダ内の "File1"を開き、コピーし、セルA4の "マスターファイル"にデータを貼り付けます。その後、 "File1"を閉じ、 "File2"を開き、セルA5の "Master File"にデータをコピーし、 "File2"を閉じます。フォルダ内のすべてのファイルが開いたり閉じたりするまで、これが繰り返されます。

これは私が今使っているコードですが、正しく動作するようにコピーと貼り付けのコードを取得することはできません。私は、コードが現在どのファイルであるかを知り、貼り付けるマスターファイルのセルのカウンタを設定するところで、ループを設定する方法を考え出すのに苦労しています。

Sub LLoopAllExcelFilesInFolder() 

'PURPOSE: To loop through all Excel files in a user specified folder and perform a set task on them 
'SOURCE: www.TheSpreadsheetGuru.com 

Dim wb As Workbook 
Dim myPath As String 
Dim myFile As String 
Dim myExtension As String 
Dim FldrPicker As FileDialog 

'Optimize Macro Speed 
Application.ScreenUpdating = False 
Application.EnableEvents = False 
Application.Calculation = xlCalculationManual 

'Retrieve Target Folder Path From User 
    Set FldrPicker = Application.FileDialog(msoFileDialogFolderPicker) 

With FldrPicker 
    .Title = "March" 
    .AllowMultiSelect = False 
    If .Show <> -1 Then GoTo NextCode 
    myPath = .SelectedItems(1) & "\" 
End With 

'In Case of Cancelhow 
NextCode: 
myPath = myPath 
If myPath = "" Then GoTo ResetSettings 

'Target File Extension (must include wildcard "*") 
myExtension = "*.xlsx" 

'Target Path with Ending Extention 
myFile = Dir(myPath & myExtension) 

'Loop through each Excel file in folder 
    Do While myFile <> "" 
'Set variable equal to opened workbook 
    Set wb = Workbooks.Open(Filename:=myPath & myFile) 

'THIS IS MY COPY AND PASTE CODE (DOESN'T WORK) 
Dim row As Integer 
While row = 4 

Workbooks("Filename:=myPath & myFile").Worksheets("Resin Log").cell("I5") = Workbooks("Workbook1.xlsm").Worksheets("Sheet1").Range("A" & row).Value 
Next row 

'Save and Close Workbook 
wb.Close SaveChanges:=False 

'Get next file name 
    myFile = Dir 
    Loop 

'Message Box when tasks are completed 
    MsgBox "Task Complete!" 

ResetSettings: 
'Reset Macro Optimization Settings 
Application.EnableEvents = True 
Application.Calculation = xlCalculationAutomatic 
Application.ScreenUpdating = True 

End Sub 
+0

コードを入力しないとうまくいくとは言い難い... – findwindow

+0

また、SOやGoogleを検索すると、この正確なコードがどこかに見つかるはずです。これは非常に一般的な作業です - 少し深く検索することを提案する –

+0

申し訳ありませんが、コピーと貼り付けのコードを追加する必要があります。私はGoogleを見てみてみましたが、いずれも私の場合は動作しません。コードは、現在のファイルを開き、特定のセルからデータをコピーして、それをマスターファイルに貼り付ける必要があります。たとえば、 "File1"を開き、セル "C1"をコピーし、セル "A4"の "Master File"にペーストし、 "File1"を閉じます。次に "File2"を開き、 "C1"をコピーし、 "A5"の "Master File"にペーストし、 "File2"を閉じます。次に、 "File3"を開き、 "C1"をコピーし、それをセル "A6"のマスターファイルに貼り付け、 "File3"を閉じます。そうですね... – Sharkywang

答えて

1

あなたが話していることは可能です。私はマクロの実行に時間がかかる場合は、コピーを使用してからロックアウトされないように、ファイル内だけで設定されたセルの値を直接

targetworkbook.worksheets(1).Range("A1").value = sourceworkbook.Worksheets(1).Range("C4").value

ではなく.Copy & .Pasteを使用して作成されてしようとしている、ことをお勧め/他のアプリケーションで貼り付けます。まだ何をすべきか不明な場合は、Record Macroをオンにしてください。生成されたコードは微調整する必要がありますが、必要なものを最大限に活用できます。

コードでの使用を避けるには、this linkもご覧ください。

+0

問題は、ループが存在する現在のファイルからデータをコピーするために「コピー&ペーストコード」が必要なことです。したがって、ループは最初のファイル(たとえば "File1")を開き、 "Master File"にセルA4にコピーします。次に、ループは「ファイル1」を閉じ、「File2」を開き、「マスターファイル」のデータをセルA5にコピーします。そしてそれはFile3以降を通過し、セルA6にデータをコピーします。しかし、私は完全なExcelのnoobだと運のないgoogleから多くのdiffコードを試した – Sharkywang

+0

いいえ私はそれが意図だった。私の例を改良すると、もしMasterFileがワークブック変数 'mf'で、' wb'がFile1なら、あなたは 'mf.worksheets(1).Range(" A4 ")を使用します:Value = wb.Worksheets(1).Range ( "A4")。値。これは、実際にコピーを実行することなく、値をコピーするのと同じ効果があります。私が言ったように、あなたはCtrl + Cを押して別のアプリケーションでコピーし、出力をねじ込むことができません。 – JMichael

関連する問題