Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: csv. Datei auslesen.

csv. Datei auslesen.
11.08.2016 05:11:59
Markus
Hallo zusammen,
ich habe das folgende Macro zum laden von csv. Datein in eine Excel-Tab verwendet:
Sub load()
Dim wks As Worksheet
Dim vFile As Variant
Application.ScreenUpdating = False
Set wks = ActiveSheet
vFile = Application.GetOpenFilename("Textdateien (*.csv), *.csv")
If vFile = False Then Exit Sub
'ActiveSheet.Cells.Delete
Range("A21:F9999").Select
Selection.ClearContents
Workbooks.OpenText Filename:=vFile, Tab:=False, semicolon:=True, comma:=False, Space:=False,  _
_
other:=False
ActiveSheet.UsedRange.Copy wks.Range("A21")
ActiveWorkbook.Close savechanges:=False
Range("A15").Select
Application.ScreenUpdating = True
End Sub
Das Beispiel habe ich von dieser Seite. Beim Einfuegen wird die csv Datei geladen allerdings wird nicht wie gewuenscht das Semikolon als Trennung verwendet.
sondern das Komma. Kann es an der Windowsversion liegen? Ich verwende eine englische Windows+ Excel Version?
2. Frage: Von meiner Testdatei benoetige ich eigentlich die Daten erst ab der 6. Zeile, wie kann ich das Einlesen erst ab der 6oder zum Beispiel 5. usw. beginnen lassen.
Vielen Dank.
Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: csv. Datei auslesen.
11.08.2016 07:18:59
Bastian
Hey Nimm doch das
Gruß Basti
Sub Datei_CSV_Importieren()
Dim strFileName As String, arrDaten, arrTmp, lngR As Long, lngLast As Long
Const cstrDelim As String = ";" 'Trennzeichen
With Application.FileDialog(msoFileDialogFilePicker)
.AllowMultiSelect = False
.Title = "Datei wählen"
.InitialFileName = "c:\"  'Pfad anpassen
.Filters.Add "CSV-Dateien", "*.csv", 1
.Filters.Add "Alle Dateien", "*.*", 2
If .Show = -1 Then
strFileName = .SelectedItems(1)
End If
End With
If strFileName  "" Then
Application.ScreenUpdating = False
Open strFileName For Input As #1
arrDaten = Split(Input(LOF(1), 1), vbCrLf)
Close #1
For lngR = 0 To 5 '1 Bis zur 6 Zeile       '5 to UBound(arrDaten) 5 bis Komplette Seite
arrTmp = Split(arrDaten(lngR), cstrDelim)
MsgBox Join(arrTmp, ",")
If UBound(arrTmp) > -1 Then
With ActiveSheet
lngLast = .Cells(Rows.Count, 1).End(xlUp).Row + 1
lngLast = Application.Max(lngLast, 1)
.Cells(lngLast, 1).Resize(, UBound(arrTmp) + 1) = Application.Transpose( _
Application.Transpose(arrTmp))
End With
End If
Next lngR
End If
Sheets(1).Range("A1") = strFileName 'Dateiname in Blatt1!A1
End Sub

Anzeige
AW: csv. Datei auslesen.
14.08.2016 10:07:02
Markus
Hallo Basti,
prinzipill funktioniert es. Damit ich es verwenden kann müsste ich aber ein par Anpassungen vornehmen die ich nicht hinbekomme.
Die Datensätze aus der csv. sollen beginnen in Tabelle1. A16 eingelesen werden.
In der cvs soll ab Zeile 6 bis zum Ende der Datei gelesen werden. Und die Daten werden als string gespeichert, dadurch kann ich die Zahlenwrte nicht zur Berechnung verwenden.
Was kann ich tun?
Anzeige
AW: csv. Datei auslesen.
14.08.2016 10:18:24
Markus

Sub Datei_Importieren()
Dim strFileName As String, arrDaten, arrTmp, lngR As Long, lngLast As Long
Const cstrDelim As String = ";" 'Trennzeichen
With Application.FileDialog(msoFileDialogFilePicker)
.AllowMultiSelect = False
.Title = "Datei wählen"
.InitialFileName = "c:\"  'Pfad anpassen
If .Show = -1 Then
strFileName = .SelectedItems(1)
End If
End With
If strFileName  "" Then
Application.ScreenUpdating = False
Open strFileName For Input As #1
arrDaten = Split(Input(LOF(1), 1), vbCrLf)
Close #1
For lngR = 6 To UBound(arrDaten)
arrTmp = Split(arrDaten(lngR), cstrDelim)
If UBound(arrTmp) > -1 Then
With ActiveSheet
lngLast = .Cells(Rows.Count, 1).End(xlUp).Row + 1
lngLast = Application.Max(lngLast, 16)
.Cells(lngLast, 1).Resize(, UBound(arrTmp) + 1) _
= Application.Transpose(Application.Transpose(arrTmp))
End With
End If
Next lngR
End If
End Sub
Das ganze sieht jetzt so aus, nur das mit der Formatierung bekomme ich nicht hin. Wie gesagt jede Zelle wird als TEXT gespeichert, ab der 3. Spalte sind es allerdings Dezimalzahlen.
Anzeige
AW: csv. Datei auslesen.
16.08.2016 15:50:10
Piet
Hallo Markus,
bezüglich Format: wie sieht es aus wenn du die Zellen vor dem kopieren richtig formatierst?
Wird dann bei Zahlen auch Text eingetragen. Wenn ja kann man einen blööden Trick versuchen.
Es klappt nicht immer, aber ein Versuch lonht sich sicher. Excel formatier es dann selbst um.
mfg Piet
For each j in Range(Bereich)
j.Value = j.Value
next j
For Each j in Range(Bereich)
j.Value = CLng(J)  'oder Double
next j

Anzeige
AW: Offen stellen vergessen owT
16.08.2016 20:34:35
Piet
,,,
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

Infobox / Tutorial

CSV-Datei auslesen und verarbeiten in Excel


Schritt-für-Schritt-Anleitung

Um eine CSV-Datei in Excel zu lesen und auszuwerten, kannst Du das folgende VBA-Makro verwenden. Dieses Beispiel ermöglicht es Dir, Daten aus einer CSV-Datei einzulesen, die ab einer bestimmten Zeile beginnen und ein benutzerdefiniertes Trennzeichen verwenden:

Sub Datei_Importieren()
    Dim strFileName As String, arrDaten, arrTmp, lngR As Long, lngLast As Long
    Const cstrDelim As String = ";" 'Trennzeichen
    With Application.FileDialog(msoFileDialogFilePicker)
        .AllowMultiSelect = False
        .Title = "Datei wählen"
        If .Show = -1 Then
            strFileName = .SelectedItems(1)
        End If
    End With
    If strFileName <> "" Then
        Application.ScreenUpdating = False
        Open strFileName For Input As #1
        arrDaten = Split(Input(LOF(1), 1), vbCrLf)
        Close #1
        For lngR = 6 To UBound(arrDaten) ' Daten ab Zeile 6 einlesen
            arrTmp = Split(arrDaten(lngR), cstrDelim)
            If UBound(arrTmp) > -1 Then
                With ActiveSheet
                    lngLast = .Cells(Rows.Count, 1).End(xlUp).Row + 1
                    lngLast = Application.Max(lngLast, 16) ' ab Zeile 16 einfügen
                    .Cells(lngLast, 1).Resize(, UBound(arrTmp) + 1) = Application.Transpose(Application.Transpose(arrTmp))
                End With
            End If
        Next lngR
    End If
End Sub

Dieses Makro erlaubt es Dir, die CSV-Daten ab der 6. Zeile zu laden und in die Excel-Tabelle ab A16 einzufügen. Du kannst das Trennzeichen anpassen, um verschiedene CSV-Formate zu unterstützen.


Häufige Fehler und Lösungen

  1. CSV wird nicht korrekt getrennt:
    Wenn die CSV-Datei mit Kommas anstelle von Semikolons getrennt ist, stelle sicher, dass Du das cstrDelim entsprechend anpasst.

  2. Daten werden als Text gespeichert:
    Um sicherzustellen, dass die Zahlen korrekt formatiert werden, kannst Du die Zellen nach dem Einfügen der Werte umformatieren. Füge den folgenden Code nach dem Einfügen der Werte hinzu:

    For Each j In Range("A16:F" & lngLast)
       j.Value = CDbl(j.Value) ' oder CLng für ganze Zahlen
    Next j

Alternative Methoden

Eine weitere Möglichkeit, CSV-Dateien in Excel zu lesen, ist die Verwendung des Workbooks.OpenText-Befehls:

Workbooks.OpenText Filename:=vFile, DataType:=xlDelimited, Comma:=False, Semicolon:=True

Hierbei kannst Du die entsprechenden Trennzeichen anpassen. Diese Methode ist jedoch weniger flexibel als das manuelle Einlesen von Daten.


Praktische Beispiele

  1. Einlesen einer CSV-Datei mit benutzerdefiniertem Trennzeichen: Angenommen, Du hast eine Datei mit Semikolon als Trennzeichen, die ab Zeile 6 eingelesen werden soll.

  2. Datenanalyse:
    Nach dem Einlesen kannst Du die Daten analysieren, z.B. mit Pivot-Tabellen oder Diagrammen, um die Informationen weiter auszuwerten.


Tipps für Profis

  • Code modularisieren: Teile Deinen VBA-Code in Funktionen, um die Lesbarkeit und Wartbarkeit zu erhöhen.
  • Fehlerbehandlung: Implementiere Fehlerbehandlungsroutinen, um unerwartete Probleme zu vermeiden.
  • Leistungsoptimierung: Deaktiviere ScreenUpdating und Automatic Calculation, um die Ausführungsgeschwindigkeit zu erhöhen, insbesondere bei großen Datenmengen.

FAQ: Häufige Fragen

1. Wie kann ich das Trennzeichen ändern?
Ändere die Konstante cstrDelim im Code, um das gewünschte Trennzeichen festzulegen.

2. Warum werden die Daten als Text angezeigt?
Die Daten können als Text angezeigt werden, wenn Excel sie nicht automatisch als Zahlen erkennt. Du kannst die Zellen nach dem Einfügen umformatieren, um sicherzustellen, dass sie als Zahlen behandelt werden.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige