2016-08-19 2 views
-1

Ich versuche, einen bestimmten Bereich von Daten aus vielen CSV-Dateien zu konsolidieren. Ich möchte diesen Bereich auswählen und in ein separates Arbeitsblatt einfügen. Die .csv-Dateien sind alle in einem Ordner angeordnet und alle haben 1 Blatt im selben Format. Der Bereich kann dynamisch sein, sodass dieser Code alle Zeilen unter einer Zelle auswählen oder leere Zeilen aus einem größeren Bereich löschen kann. Ich würde jede Hilfe schätzen.VBA-Code zu konsolidieren. CSV-Daten

Dank

+3

1. Zeichnen Sie sich selbst auf, indem Sie Daten ► Externe Daten abrufen ► Von Text verwenden, und untersuchen Sie dann den Code, um zu sehen, wie eine automatische Schleife erstellt wird. 2. Kommen Sie zurück und bearbeiten Sie Ihre Frage, um Ihre eigenen Bemühungen einzubeziehen, wenn Sie in Schwierigkeiten geraten. – Jeeped

Antwort

0

Ich habe eine Batch-Datei so etwas wie dies in der Vergangenheit verwendet. Dieser Code behebt das Löschen von Aggregate.csv nicht, wenn die Stapelverarbeitungsdatei erneut ausgeführt wird.

@ECHO OFF 
Set loc=C:\Test\ 
Copy %loc%*.csv %loc%\Aggregate.csv 

Einmal in Excel können Sie alle Kopfzeilen und Filterdatumsbereiche mit VBA löschen. Sie können auch die Shell-Methode von VBA verwenden, um mit Copy zu aggregieren.

Edit: Sie können auch eine Datenquelle in anderen Datenquellen> MS-Abfrage, um die Abfrage Aggregate.csv mit Microsoft Text Driver mit Datumsbereiche erstellen usw.

0

Einige Hinweise, wie über die Lösung gehen :

Zuerst die Dateien mit dem FileSystemObject auflisten.

Set fso = CreateObject("Scripting.FileSystemObject") 
set fld = fso.GetFolder("path\to\my\folder") 
For Each file in fld.Files 
    If file.Name Like "*.csv" Then LoadFile file.Name 
Next 

Deklarieren fso, fld, file als Object. LoadFile wird eine Funktion sein, die Sie schreiben müssen, die eine einzelne Datei verarbeitet. Es wird etwa wie folgt aussehen:

Sub LoadFile(filename as String) 
    dim buffer() as variant 
    dim wb as workbook, ws as worksheet 
    dim i as Long, beginrow as long, endrow as long 

    Set wb = Workbooks.Open(filename) 
    Set ws = wb.Worksheets(1) ' .csv always has 1 worksheet 
    buffer = ws.Range("A1:A10000") ' put a sensible upper bound here 
    for i = 1 to 10000 
     ' replace (..first..) and (..last..) with your search interval 
     if buffer(i, 1) <= (..first..) Then beginrow = i 
     if buffer(i, 1) < (..last..) Then endrow=i 
    next 
    ' now beginrow and endrow hold the interval to cut 
    ws.Cells(beginrow, 1).Resize(endrow-beginrow+1, column_count).Copy destination:=(... to be determined ..) 
    wb.Close 
End Sub 

Die Funktion öffnet die Datei; sucht dann in der ersten Spalte nach dem zu kopierenden Intervall; kopiert dann die Zellen und schließt die Datei.

Der Code ist nicht lauffähig, aber sollte Ihnen hoffentlich die richtigen Ideen geben.

Verwandte Themen