139097
Goto Top

Excel VBA Marko um CSV-Dateien in BESTIMMTER REIHENFOLGE auf einem Excel Sheet zusammenzuführen

Hallo,

ich habe hier im Forum in einem anderen Thread bereits den Code von colinardo zum zusammenführen der CSV-Dateien gefunden Besagter Thread,

Sub ImportCSVFromFolder()
    Dim wsTemp As Worksheet, wsTarget As Worksheet, curCell As Range, CSVPFAD As String, fso As Object, f As Object, strCSVDelimiter As String
    
    With Application.FileDialog(msoFileDialogFolderPicker)
        .InitialFileName = "C:\"  
        .Title = "Ordnerauswahl"  
        .ButtonName = "Auswahl..."  
        .InitialView = msoFileDialogViewList
        If .Show = -1 Then
            CSVPFAD = .SelectedItems(1)
        Else
            Exit Sub
        End If
    End With
    
    'Legt das CSV-Trennzeichen für die Dateien fest  
    strCSVDelimiter = ";"  
    
    Set fso = CreateObject("Scripting.Filesystemobject")  
    Application.DisplayAlerts = False
    Application.ScreenUpdating = False
    
    'Zielarbeitsblatt für die importierten Daten  
    Set wsTarget = Worksheets(1)
    wsTarget.Name = "Zusammenfassung"  
    'temporäres Arbeitsblatt für den Import der Daten erstellen  
    Set wsTemp = Worksheets.Add(After:=Worksheets(Worksheets.Count))
    
    'Inhalt des Zusammenfassungsblattes löschen  
    wsTarget.UsedRange.Clear
    
    'Startausgabezelle festlegen  
    Set curCell = wsTarget.Range("B1")  
    For Each f In fso.GetFolder(CSVPFAD).Files
        If LCase(fso.GetExtensionName(f.Name)) = "csv" Then  
            'Temporäres Sheet löschen  
            wsTemp.UsedRange.Clear
            'CSV-Daten in Temporäres Sheet importieren  
            With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & f.Path, Destination:=wsTemp.Range("$A$1"))  
                .Name = "import"  
                .FieldNames = True
                .AdjustColumnWidth = True
                .RefreshPeriod = 0
                .TextFilePlatform = xlWindows
                .TextFileStartRow = 1
                .TextFileParseType = xlDelimited
                .TextFileTextQualifier = xlTextQualifierDoubleQuote
                .TextFileOtherDelimiter = strCSVDelimiter
                .Refresh BackgroundQuery:=False
                .Delete
            End With
            
            With wsTemp
                'Daten in Zielsheet kopieren  
                .UsedRange.Copy curCell
                ' Dateinamen in erste Spalte vor die Zeilen schreiben  
                curCell.Offset(1, -1).Resize(.UsedRange.Rows.Count - 1, 1).Value = f.Name
            End With
            'Ausgabezeile eins nach unten schieben  
            Set curCell = wsTarget.Cells(wsTarget.UsedRange.Rows.Count + 2, 2)
        End If
    Next
    'Temporäres Sheet löschen  
    wsTemp.Delete
    'Spalten anpassen  
    wsTarget.Columns.AutoFit
    
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
    MsgBox "Vorgang beendet!", vbInformation  
    Set fso = Nothing
End Sub

Ich habe CSV-Dateien die eine Spalte mit Zeitstempel und eine Zeile mir Messwerten haben, das Trennzeichen ist ; .
Die Dateien sind im Ordner so benannt, dass Sie nummerisch aufgelistet werden .

01.19 (1)
01.19 (2)
01.19 (3)
...
01.19 (10)
01.19 (11)
...
02.19(1)
02.19(2)
...


Jetzt werden mir die Datenreihen im Excel-Sheet leider nicht wie im Ordner hinterlegt einfach direkt untereinander gepackt, sondern Excel packt erst alle Dateien mit einer 1 an erster Stelle der "Prüfsumme" , dann mit einer 2 etc etc. untereinander.

BSP:

01.19 (1)
01.19 (11)
01.19 (12)
01.19 (13)
...
02.19 (2)
02.19 (21)
...


wie kann das im Code ändern, beziehungsweise wie kann die meine Dateien sinnvoll bennen damit dieser richtig zusammengeführt werden. Es handelt sich um Temperatur Messreihen von Solarmodulen die täglich in 15-Minuten Taktung erstellt werden. Ich hätte diese gerne in einer großen Excel-Tabelle um sie auszuwerten. Im besten Fall enthät der Name der Datei das jeweilige Datum, da dieses nicht in der CSV-Dateien enthalten ist, und von mir von Hand gerade angepasst wird, lässt sicht vlt auch irgendwie einfacher lösen.

Ich hoffe ich konnte alles sinnvoll erklären, bewege mich wenig in diesem Bereich und werfe bestimmt den einen oder anderen Begriff durcheinander!

Vielen Dank für die Hilfe!

Binnichhier

Content-Key: 426808

Url: https://administrator.de/contentid/426808

Printed on: April 26, 2024 at 19:04 o'clock

Member: TheJoker2305
TheJoker2305 Mar 11, 2019 at 15:27:42 (UTC)
Goto Top
Jetzt werden mir die Datenreihen im Excel-Sheet leider nicht wie im Ordner hinterlegt einfach direkt untereinander gepackt, sondern Excel packt erst alle Dateien mit einer 1 an erster Stelle der "Prüfsumme" , dann mit einer 2 etc etc. untereinander.
Da liegt an der Sortierung der Dateien im Verzeichnis. 1 kommt vor 11.

wie kann das im Code ändern, beziehungsweise wie kann die meine Dateien sinnvoll bennen damit dieser richtig zusammengeführt werden.

Als Dateiname bietet sich folgendes Format an: YYYY-MM-TT HH_mm_ss.csv
Somit sind die Dateien immer sortiert nach Jahr, Monat und Tag.

Als zweiten Punkt würde ich die Datums- und Zeitangaben der jeweiligen Datei für die Dauer der Dateiverarbeitung in einer Variable speichern und mit in die Tabelle in der Datumsspalte hinterlegen, bis zum Beginn der neuen Datei.
Mitglied: 138810
138810 Mar 14, 2019 updated at 09:13:15 (UTC)
Goto Top
Wozu für sowas noch VBA hernehmen, das erledigt dir Powershell auch ohne vorheriges umbenennen in einem Einzeiler:
(gci 'D:\Ordner' -File -Filter *.csv | sort {[regex]::replace($_.Basename,'\((\d+)\)',{param($m) $m.Groups[1].Value.padLeft(3,'0')})} | select -Expand Fullname | import-csv -Delimiter ";") | export-csv .\merged.csv -Delimiter ";" -NoTypeInformation -Encoding UTF8