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

Forumthread: .csv Datei als Text importieren

.csv Datei als Text importieren
16.08.2018 13:49:54
Charlotte
Schönen guten Tag,
ich bin grad auf der Suche nach der Lösung für mein Problem.
Es ist wahrscheinlich relativ simpel.
Ich muss mehrere .csv-Dateien importieren. Code dafür steht auch und funktioniert super.
Einziges Problem ist das Textformat. Ich hab so blöde Zahlen, wie 24.2 drin, die Excel natürlich (was soll es auch sonst sein) zum 24. Februar macht.
Kann ich in dem Code etwas hinzufügen, dass die .csv direkt als Text importiert?
Genau dies hat sonst per Hand immer geholfen.
Sub Rename_Files()
'(C) Ramses
'Liest alle CSV-Dateien in einem Verzeichnis ein
Dim Datei As String, freeCol As Long
Dim Qe As Integer
Dim PFAD As String
PFAD = "Y:\ATB\00_Friedrichs\SKT\GOM CSV Dateien\" 'ACHTUNG: Bachslash am Schluss
Datei = Dir(PFAD & "*.csv")
Qe = MsgBox("Zum Import muss die aktuelle Tabelle leer sein," & vbCrLf & _
"bzw. alle Daten der aktuellen Tabelle: "" " & ActiveSheet.Name & " "" werden gelöscht", _
vbYesNo + vbCritical, "CSV-Import starten ?")
If Qe = vbNo Then
MsgBox "CSV-Import abgebrochen"
Exit Sub
Else
Cells.Clear
End If
Do While Datei  ""
If Cells(2, Columns.Count).End(xlToLeft).Column = 1 Then
freeCol = 1
Else
freeCol = Cells(2, Columns.Count).End(xlToLeft).Column + 1
End If
Cells(1, freeCol) = Datei
With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & PFAD & Datei, Destination:=Cells(2, _
freeCol))
.Name = Datei
.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 = True
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With
Datei = Dir()
Loop
End Sub
Dies ist der Code.
Schonmal vielen vielen Dank für Antworten.
Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Format setzen
16.08.2018 14:00:48
Fennek
Hallo,
mit dieser Zeile wird das Format bestimmt:

.TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
Sieh bitte in der Hilfefunktion nach, vermutlich bedeutet "1": Zahl; "2": Text.
mfg
AW: Format setzen
16.08.2018 14:06:56
Charlotte
Super Danke!
Witzigerweise klappt es bei allen .csv Dateien (sind insgesamt 8), nur bei der ersten nicht.
Da steht noch immer das vermeintliche Datum.
Anzeige
AW: Format setzen und Thema ist erledigt
16.08.2018 14:09:50
Charlotte
Mir fällt auch grade auf, dass das Thema damit schon gelöst ist.
Ich brauch nicht zwingend den ersten Wert, der als "Datum" geschrieben ist.
Vielen lieben Dank nochmal!
TextFileDecimalSeparator
16.08.2018 14:06:44
ChrisL
Hi
Ich vermute...
https://msdn.microsoft.com/de-de/vba/excel-vba/articles/querytable-textfiledecimalseparator-property-excel
cu
Chris
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

.csv Dateien als Text importieren in Excel


Schritt-für-Schritt-Anleitung

Um mehrere .csv-Dateien in Excel zu importieren und sicherzustellen, dass Zahlen wie 24.2 als Text behandelt werden, kannst Du den folgenden VBA-Code verwenden:

Sub Rename_Files()
    Dim Datei As String, freeCol As Long
    Dim Qe As Integer
    Dim PFAD As String
    PFAD = "Y:\ATB\00_Friedrichs\SKT\GOM CSV Dateien\" ' ACHTUNG: Backslash am Schluss
    Datei = Dir(PFAD & "*.csv")
    Qe = MsgBox("Zum Import muss die aktuelle Tabelle leer sein," & vbCrLf & _
                "bzw. alle Daten der aktuellen Tabelle: """ & ActiveSheet.Name & """ werden gelöscht", _
                vbYesNo + vbCritical, "CSV-Import starten?")
    If Qe = vbNo Then
        MsgBox "CSV-Import abgebrochen"
        Exit Sub
    Else
        Cells.Clear
    End If
    Do While Datei <> ""
        If Cells(2, Columns.Count).End(xlToLeft).Column = 1 Then
            freeCol = 1
        Else
            freeCol = Cells(2, Columns.Count).End(xlToLeft).Column + 1
        End If
        Cells(1, freeCol) = Datei
        With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & PFAD & Datei, Destination:=Cells(2, freeCol))
            .Name = Datei
            .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 = True
            .TextFileCommaDelimiter = False
            .TextFileSpaceDelimiter = False
            .TextFileColumnDataTypes = Array(2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
            .TextFileTrailingMinusNumbers = True
            .Refresh BackgroundQuery:=False
        End With
        Datei = Dir()
    Loop
End Sub

In der Zeile .TextFileColumnDataTypes = Array(2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1) wird das Format für die Spalten definiert. Hierbei steht "2" für Text. Diese Anpassung sorgt dafür, dass die importierten Werte als Text behandelt werden.


Häufige Fehler und Lösungen

  • Problem: Die erste Datei wird weiterhin als Datum importiert.

    • Lösung: Stelle sicher, dass die .TextFileColumnDataTypes korrekt konfiguriert ist. Falls das Problem weiterhin besteht, versuche die Importreihenfolge der Dateien zu ändern oder die erste Datei manuell zu überprüfen.
  • Problem: Die Importbeschriftung wird nicht korrekt angezeigt.

    • Lösung: Überprüfe, ob die Zeile Cells(1, freeCol) = Datei korrekt implementiert ist. Diese sorgt dafür, dass die Dateinamen als Beschriftung in der ersten Zeile erscheinen.

Alternative Methoden

Wenn Du mehrere CSV-Dateien in Excel importieren möchtest, kannst Du auch die Datenimport-Funktion in Excel direkt nutzen:

  1. Gehe zu Daten > Daten abrufen > Aus Datei > Aus Text/CSV.
  2. Wähle deine CSV-Datei aus und klicke auf Importieren.
  3. Stelle sicher, dass Du die richtigen Einstellungen für die Datentypen wählst, um zu verhindern, dass Excel Zahlen als Datum interpretiert.

Praktische Beispiele

Ein Beispiel für das Importieren von mehreren CSV-Dateien könnte sein:

  • Du hast 8 .csv-Dateien, die Verkaufszahlen enthalten.
  • Du verwendest den bereitgestellten VBA-Code, um alle Dateien in eine Excel-Tabelle zu importieren, wobei Du sicherstellst, dass alle Zahlen als Text behandelt werden, um Missverständnisse zu vermeiden.

Tipps für Profis

  • Nutze die TextFileDecimalSeparator-Eigenschaft, um sicherzustellen, dass Dezimaltrennzeichen korrekt interpretiert werden. Dies kann besonders nützlich sein, wenn Deine CSV-Dateien unterschiedliche Dezimaltrennzeichen verwenden.

  • Überlege, eine Fehlerbehandlungsroutine hinzuzufügen, um unerwartete Probleme während des Imports zu identifizieren und zu melden.


FAQ: Häufige Fragen

1. Wie kann ich sicherstellen, dass alle importierten Daten als Text behandelt werden?
Durch das Setzen von .TextFileColumnDataTypes = Array(2, 1, 1, ... ) kannst Du sicherstellen, dass die gewünschten Spalten als Text importiert werden.

2. Was tun, wenn Excel weiterhin einige Daten als Datum interpretiert?
Überprüfe die CSV-Datei auf möglicherweise fehlerhafte Werte oder ändere die Importreihenfolge der Dateien. Manchmal kann ein bestimmter Wert in der ersten Zeile das gesamte Format beeinflussen.

3. Funktioniert dieser Code in allen Excel-Versionen?
Der bereitgestellte VBA-Code sollte in den meisten aktuellen Excel-Versionen funktionieren, jedoch kann es Unterschiede in den Menüs und Funktionen geben.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige