2016-04-15 11 views
0

Ich habe es mit zwei großen csv-Dateien in Excel zu tun (jeweils etwa 100-400 MB), von denen eine in zwei Dokumente (D1 und D2) aufgeteilt werden muss, damit ich sie öffnen kann . Ruf den anderen D3 an. Jede Zeile in diesen Dokumenten hat neben der Kopfzeile die Form ID, Daten1, Daten2, Daten3 ... Daten 10 oder so, wobei die Dokumente D1/2 andere Daten als D3 haben. Ich möchte die Informationen aus den Dokumenten D1 und D2 in D3 hinzufügen, aber nur für die IDs, die in D3 vorhanden sind (eine kleinere Datei). Was ist der einfachste Weg für mich? Ich habe auch noch die D1/2-Datei, wenn ich es tun kann, ohne die Datei in Excel zu öffnen.Übereinstimmende Zeilen in zwei Excel-Dokumenten

Sorry, wenn dies eine verwirrende Frage war, kann ich Klärung Fragen beantworten, wenn

benötigt
+0

Siehe [wie man fragt] (http://stackoverflow.com/help/how-to-ask). – findwindow

+0

Ich bin mir nicht sicher, was du meinst, ich habe die Regeln befolgt, lese dieses Thema durch und glaube, dass meine Frage ziemlich einfach ist. Gibt es einen Teil verwirrend? – Luke

+0

Sie haben es gelesen, aber haben Sie es verstanden? Bitte versuche es erneut. – findwindow

Antwort

0

ich etwas hier, dass Sie begonnen erhalten, haben Sie einen Blick und lassen Sie mich über die Logik wissen Ihrer Daten zusammenführen .. ...

Sub MergeData() 

Dim D1 As Worksheet 
Dim D3 As Worksheet 
Dim Rng As Range 
Dim Arr1 As Variant 
Dim Arr2 As Variant 
Dim Rw1 As Long, Rw2 As Long 


'IF you the master file and 1 of the other files first in excel 
'you can just reference them like this, otherwise change this accordingly 
Set D1 = Workbooks("CSV1").Sheet1 
Set D3 = Workbooks("CSV3").Sheet1 


'D3 is the masterFile 
'Lets store its data in Arr1 
Set Rng = D3.UsedRange 
Arr1 = Rng.Value 

'since your working on large files lets try keep memory usage down to a minimum 
'we will work on 2 sheets at a time not all 3. 
'Arr2 now contains the sheet (CSV1) we will extract data from 
Set Rng = D1.UsedRange 
Set Arr2 = Rng.Value 

Set Rng = Nothing 

'Notice the + 1, its to skip the headers in case your wandering 
'This is the basic loop setup 
For Rw1 = LBound(Arr1, 1) + 1 To UBound(Arr1, 1) 
    For Rw2 = LBound(Arr2, 1) + 1 To UBound(Arr2, 1) 
     If Arr(Rw1, 1) = Arr2(Rw2, 1) Then 'OR lcase(Arr(Rw1, 1)) = lcase(Arr2(Rw2, 1)) if letter case might be a problem 
      'we found a matching ID 
      'now im not sure exactly what you want to happen here..... 
      'do you want to check if the master file has all the data that the other file has 
      'if not then transfer the columns of data it is missing 
      'or should all the columns in the master file be updated with the new values in the other file..... 
      'This will change what code needs writing here 
      'we may need an aditional array to hold new values temporarily 
     End If 
    Next Rw2 
Next Rw1 

'After all data has been extracted 
'this code will also depend on what happens above 
'but something like this 
'set rng = D1.Range("this will be the size of the array").Value = Arr1 

End Sub

der exakt gleiche Code wird für die zweite Datei verwendet werden, so nur, dass ich die 2-Dateien zu starten.

Wir brauchen mehr Eingang in Bezug auf welche Daten zu extrahieren und wenn wir etwas in der Master-Datei usw. usw. ersetzen, seien Sie spezifisch.

Verwandte Themen