Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: csv-Dateien einlesen, sortieren und speichern

csv-Dateien einlesen, sortieren und speichern
02.12.2013 10:04:29
Fabian
Hallo Forum-User,
ich habe schon einiges zu diesem Thema recherchiert, jedochkeine passende Antwort gefunden und hoffe, dass mir hier jemand helfen kann.
Folgendes Problem macht mir zu schaffen:
  • Ich möchte mehrere .csv Dateien über VBA öffnen (Messdaten)

  • Die Dateien bestehen aus ca. 250*10000 Werten, welche durch Kommas getrennt sind

  • Nach dem Öffnen sollen die Informationen einer .csv in jeweils ein Arbeitsblatt geschrieben und in Spalten sortiert werden

  • Anschließend soll jedes Arbeitsblatt als neue, formatierte .xls Datei gespeichert werden

  • Mittels Makrorecorder und eigener Recherche bin ich bisher soweit gekommen:
    Sub test()
    ' test Makro
    ' Tastenkombination: Strg+t
    Dim strFilename As Variant
    Dim iLoop As Integer
    strFilename = Application.GetOpenFilename("Datei Einlesen (*.csv), *.csv", MultiSelect:= _
    True)
    ActiveWorkbook.Worksheets.Add
    For iLoop = LBound(strFilename) To UBound(strFilename)
    With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & strFilename(iLoop), _
    Destination:=Range("A1"))
    .Name = "Neues Blatt"
    .FieldNames = True
    .RowNumbers = False
    .FillAdjacentFormulas = False
    .PreserveFormatting = True
    .RefreshOnFileOpen = False
    .RefreshStyle = xlInsertDeleteCells
    .SavePassword = False
    .SaveData = True
    .AdjustColumnWidth = True
    .RefreshPeriod = 0
    .TextFilePromptOnRefresh = False
    .TextFilePlatform = 850
    .TextFileStartRow = 1
    .TextFileParseType = xlDelimited
    .TextFileTextQualifier = xlTextQualifierDoubleQuote
    .TextFileConsecutiveDelimiter = False
    .TextFileTabDelimiter = False
    .TextFileSemicolonDelimiter = False
    .TextFileCommaDelimiter = True
    .TextFileSpaceDelimiter = False
    .TextFileColumnDataTypes = Array(2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,  _
    _
    2, 2, 2, 2, _
    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,  _
    _
    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 _
    , 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,   _
    _
    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, _
    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,  _
    _
    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 _
    , 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,   _
    _
    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, _
    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,  _
    _
    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 _
    , 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,   _
    _
    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, _
    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,  _
    _
    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 _
    , 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,   _
    _
    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, _
    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,  _
    _
    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 _
    , 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2)
    .TextFileThousandsSeparator = " "
    .TextFileTrailingMinusNumbers = True
    .Refresh BackgroundQuery:=False
    ActiveWorkbook.Worksheets.Add
    End With
    Next
    End Sub
    

    Dies ermöglicht mir, die csv über einen Öffnungsdialog auszuwählen. Diese werden in das gewünschte Format gebracht und in einzelne Arbeitsblätter geschrieben. Jedoch wird zusätzlich ein leeres Arbeitsblatt hinzugefügt. Außerdem werden nur die Werte der ersten csv übernommen. Bei der zweiten wird nur die erste Spalte mit "####" gefüllt und der Rest bleibt leer.
    Habe es bisher mit 2 csv getestet, da mir momentan nicht mehr zur Verfügung stehen. Da es sensible Daten sind kann ich leider kein Beispiel zur Verfügung stellen. Sie sehen in etwa so aus:
  • 1.Zeile: zeit, temperatur, druck, ...

  • 2.Zeile: datum uhrzeit, zahl, zahl, ...

  • 3.Zeile und ff.: wie Zeile 2

  • Ich hoffe ich konnte mein Problem detailliert genug beschreiben.
    Vielen Dank im Voraus für die Hilfe.

    Anzeige

    1
    Beitrag zum Forumthread
    Beitrag zu diesem Forumthread

    Betreff
    Datum
    Anwender
    Anzeige
    CROSSPOST O-L
    02.12.2013 10:54:04
    CROSSPOST
    Anzeige
    ;

    Forumthreads zu verwandten Themen

    Anzeige
    Anzeige

    Infobox / Tutorial

    CSV-Dateien in Excel sortieren und speichern


    Schritt-für-Schritt-Anleitung

    Um eine CSV-Datei in Excel zu sortieren und zu speichern, kannst du VBA verwenden. Befolge diese Schritte:

    1. VBA-Editor öffnen: Drücke ALT + F11, um den VBA-Editor zu öffnen.

    2. Neues Modul erstellen: Klicke mit der rechten Maustaste auf "VBAProject (DeineDatei.xlsx)" und wähle "Einfügen" > "Modul".

    3. Code einfügen: Kopiere den folgenden Code in das Modul:

      Sub csvEinlesenUndSortieren()
          Dim strFilename As Variant
          Dim iLoop As Integer
          strFilename = Application.GetOpenFilename("CSV Dateien (*.csv), *.csv", MultiSelect:=True)
      
          For iLoop = LBound(strFilename) To UBound(strFilename)
              Dim ws As Worksheet
              Set ws = ThisWorkbook.Worksheets.Add
              With ws.QueryTables.Add(Connection:="TEXT;" & strFilename(iLoop), _
                  Destination:=ws.Range("A1"))
                  .TextFileConsecutiveDelimiter = False
                  .TextFileTabDelimiter = False
                  .TextFileSemicolonDelimiter = False
                  .TextFileCommaDelimiter = True
                  .Refresh
              End With
      
              ' Hier kannst du die Sortierfunktion hinzufügen
              ws.Sort.SortFields.Clear
              ws.Sort.SortFields.Add Key:=Range("A1"), Order:=xlAscending
              With ws.Sort
                  .SetRange ws.UsedRange
                  .Header = xlYes
                  .MatchCase = False
                  .Orientation = xlTopToBottom
                  .SortMethod = xlPinYin
                  .Apply
              End With
      
              ' Speichern als XLS-Datei
              ws.SaveAs Filename:=Left(strFilename(iLoop), Len(strFilename(iLoop)) - 4) & ".xls", FileFormat:=xlExcel8
          Next iLoop
      End Sub
    4. Makro ausführen: Schließe den VBA-Editor und gehe zurück zu Excel. Drücke ALT + F8, wähle csvEinlesenUndSortieren aus und klicke auf "Ausführen".


    Häufige Fehler und Lösungen

    • Leeres Arbeitsblatt wird hinzugefügt: Stelle sicher, dass du das ActiveWorkbook.Worksheets.Add nur einmal pro Datei verwendest. Im obigen Beispiel wird jeder Datensatz in ein neues Blatt geschrieben.

    • Nur die erste Spalte wird gefüllt: Überprüfe, ob die CSV-Datei korrekt formatiert ist und die Trennzeichen stimmen. Der Code nutzt Kommas als Trennzeichen.

    • Daten werden nicht richtig sortiert: Achte darauf, dass die Sortierfunktion nach dem Einlesen der Daten angewandt wird. Die Sortierung erfolgt nach der Spalte A, du kannst dies anpassen, indem du den entsprechenden Schlüssel änderst.


    Alternative Methoden

    Falls du keine VBA-Lösung nutzen möchtest, kannst du CSV-Dateien auch manuell in Excel öffnen und sortieren:

    1. CSV-Datei öffnen: Doppelklicke auf die Datei oder öffne sie über Daten > Daten abrufen > Aus Text/CSV.
    2. Daten sortieren: Markiere die Daten, gehe zu Daten > Sortieren, und wähle die gewünschte Spalte aus.
    3. Speichern: Speichere die Datei als Excel-Datei über Datei > Speichern unter.

    Praktische Beispiele

    Hier sind einige praktische Beispiele, wie du mit CSV-Dateien in Excel umgehen kannst:

    • Messdaten analysieren: Importiere Messdaten aus einer CSV-Datei, sortiere sie nach Zeit und analysiere Trends.
    • Bericht erstellen: Lade mehrere CSV-Dateien herunter, sortiere die Werte in Excel und erstelle einen konsolidierten Bericht.

    Tipps für Profis

    • Automatisierung: Verwende VBA, um den Import und die Sortierung mehrerer CSV-Dateien zu automatisieren. Dies spart Zeit und minimiert Fehler.
    • Fehlerbehandlung: Implementiere Fehlerbehandlungsroutinen in deinem VBA-Code, um unerwartete Probleme zu identifizieren und zu beheben.
    • Datenvalidierung: Stelle sicher, dass die Daten in der CSV-Datei den erwarteten Formaten entsprechen, bevor du sie importierst.

    FAQ: Häufige Fragen

    1. Wie kann ich mehrere CSV-Dateien gleichzeitig in Excel importieren?
    Du kannst den oben beschriebenen VBA-Code verwenden, um mehrere CSV-Dateien auszuwählen und sie gleichzeitig zu importieren.

    2. Kann ich die CSV-Datei nach mehreren Spalten sortieren?
    Ja, du kannst im VBA-Code mehrere Sortierfelder hinzufügen. Einfach weitere SortFields.Add-Zeilen für die gewünschten Spalten hinzufügen.

    3. Was tun, wenn die CSV-Datei nicht korrekt geladen wird?
    Überprüfe die Formatierung der CSV-Datei und die Trennzeichen. Stelle sicher, dass du das richtige Trennzeichen im VBA-Code angibst.

    4. Welche Excel-Version benötige ich?
    Der beschriebene VBA-Code funktioniert in Excel 2010 und neueren Versionen.

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige