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

Forumthread: Import CSV in Excel via VBA

Import CSV in Excel via VBA
01.02.2017 10:59:04
NetMare
Hallo zusammen,
ich habe hier ein skript zum csv Import in ein Tabellenblatt gefunden. Jedoch möchte ich einiges Ändern, weiß aber leider nicht wie.
Hier mein aktuelles skript:
Sub Datei_Importieren()
Dim strFileName As String, arrDaten, arrTmp, lngR As Long, lngLast As Long
Const cstrDelim As String = ";" 'Trennzeichen
strFileName = "C:\test.csv"
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 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, 2)
.Cells(lngLast, 1).Resize(, UBound(arrTmp) + 1) _
= Application.Transpose(Application.Transpose(arrTmp))
End With
End If
Next lngR
End If
End Sub
Nun möchte ich im Code noch das Tabellenblatt angeben in das importiert werden soll und es soll immer wieder erneut ab A2 importiert werden. Aktuell hängt das skript einen neuen Import unten an.
Ich hoffe auf Hilfe ;-)
Gruß
Anzeige

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Import CSV in Excel via VBA
01.02.2017 12:00:36
UweD
Hallo
ungetestet
Sub Datei_Importieren()
Dim strFileName As String, arrDaten, arrTmp, lngR As Long
Const cstrDelim As String = ";" 'Trennzeichen
strFileName = "C:\test.csv"
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 UBound(arrDaten)
arrTmp = Split(arrDaten(lngR), cstrDelim)
If UBound(arrTmp) > -1 Then
With Sheets("Tabelle1")
.Cells(2, 1).Resize(, UBound(arrTmp) + 1) _
= Application.Transpose(Application.Transpose(arrTmp))
End With
End If
Next lngR
End If
End Sub

LG UweD
Anzeige
AW: Import CSV in Excel via VBA
01.02.2017 12:02:48
UweD
Hi nochmal
evtl. noch einen Reset vorher
        With Sheets("Tabelle1")
.cells.clearcontents
.Cells(2, 1).Resize(, UBound(arrTmp) + 1) _

AW: Import CSV in Excel via VBA
01.02.2017 12:08:57
NetMare
Hallo Uwe,
danke für deine Rückmeldung.
Nun wird mir jedoch nur die letze Zeile der CSV in die Zeile A geschrieben...
Gruß
Anzeige
AW: Import CSV in Excel via VBA
01.02.2017 13:00:29
UweD
so?
Sub Datei_Importieren()
    Dim strFileName As String, arrDaten, arrTmp, lngR As Long, lngLast As Long
    Const cstrDelim As String = ";" 'Trennzeichen 
        
    strFileName = "C:\test.csv"
        
    If strFileName <> "" Then
        Application.ScreenUpdating = False
        Open strFileName For Input As #1
        arrDaten = Split(Input(LOF(1), 1), vbCrLf)
        Close #1
        lngLast = 2
        With Sheets("Tabelle1")
            .Cells.ClearContents
            For lngR = 0 To Ubound(arrDaten)
                arrTmp = Split(arrDaten(lngR), cstrDelim)
                If Ubound(arrTmp) > -1 Then
                    .Cells(lngLast, 1).Resize(, Ubound(arrTmp) + 1) _
                        = Application.Transpose(Application.Transpose(arrTmp))
                    lngLast = lngLast + 1
                End If
            Next lngR
        End With
    End If
                    
End Sub

LG UweD
Anzeige
AW: Import CSV in Excel via VBA
01.02.2017 16:14:44
NetMare
Danke!
AW: gern geschehen owt
01.02.2017 16:22:30
UweD
AW: Import CSV in Excel via VBA
01.02.2017 12:20:41
Piet
Hallo NetMare
im Prinzip ziemlich einfach, wenn man es weiss. Probier mal den geanderten Code aus.
Den Namen der Zieltabelle bitte in der Const Anweisung festlegen. Wenn sie sich staendig aendert kann man auch über eine InputBox gehen. Die Möglichkeit habe ich in ' Zeichen (grün) mit vorgesehen. Dann muss aber die Const Anweisung gelöscht werden, beides zusammen funktioniert nicht!! Zum aktivieren der InputBox nur das ' Zeichen entfernen, auch bei der If Then Zeile. Viel Spass beim Testen.
mfg Piet

Const ZielTab = "Tabelle1"    'Name der Ziel Tabelle, kann hier eaendert werden
Dim Test As Object
Sub Datei_Importieren()
Dim strFileName As String, arrDaten, arrTmp, lngR As Long, lngLast As Long
Const cstrDelim As String = ";" 'Trennzeichen
strFileName = "C:\test.csv"
'auf Wunsch Eingabe über InputBox  (dann muss Const gelöscht werden!!)
'ZielTab = InputBox("Bitte die Ziel-Tabelle eingeben")
'If ZielTab = Empty Then Exit Sub
On Error GoTo Fehler
'Set dient nur zum Test ob die Ziel-Tabelle existiert
Set Test = Worksheets(ZielTab)  'keine weitere Funktion!!
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 UBound(arrDaten)
arrTmp = Split(arrDaten(lngR), cstrDelim)
If UBound(arrTmp) > -1 Then
'With ActiveSheet
'lngLast = .Cells(Rows.Count, 1).End(xlUp).Row + 1
'*** eaendert auf Zieltabelle mit A2 zum einfügen
With Worksheets(ZielTab)
lngLast = 2   '1.Zeile in die kopiert werden soll
lngLast = Application.Max(lngLast, 2)
.Cells(lngLast, 1).Resize(, UBound(arrTmp) + 1) _
= Application.Transpose(Application.Transpose(arrTmp))
End With
End If
Next lngR
End If
Exit Sub
Fehler: MsgBox "Name der Zieltabelle stimmt nicht, oder sie fehlt!"
End Sub

Anzeige
AW: Import CSV in Excel via VBA
01.02.2017 12:25:26
NetMare
Hi Piet,
liegt der Fehler bei mir? Auch hier wird nur die letzte Zeile der CSV in Zeile 2 der Tabell1 geschrieben?!!!
Gruß
AW: Import CSV in Excel via VBA
01.02.2017 12:26:22
Piet
Nachtrag
Ich sehe gerade das ich in der Zieltabelle Range(xx).ClearContents vergessen habe. Bitte selbst ergaenzen
;

Forumthreads zu verwandten Themen

Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

CSV in Excel importieren mit VBA


Schritt-für-Schritt-Anleitung

Um eine CSV-Datei in Excel mittels VBA zu importieren, kannst du folgendes Skript verwenden. Dieses Skript ermöglicht dir das Einlesen einer CSV-Datei und das Einfügen der Daten in ein bestimmtes Tabellenblatt ab Zelle A2.

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Füge ein neues Modul hinzu, indem du mit der rechten Maustaste auf "VBAProject" klickst und "Einfügen" > "Modul" auswählst.
  3. Kopiere den folgenden Code in das Modul:
Sub Datei_Importieren()
    Dim strFileName As String, arrDaten, arrTmp, lngR As Long, lngLast As Long
    Const cstrDelim As String = ";" 'Trennzeichen
    Const ZielTab = "Tabelle1" 'Name der Ziel Tabelle

    strFileName = "C:\test.csv"

    If strFileName <> "" Then
        Application.ScreenUpdating = False
        Open strFileName For Input As #1
        arrDaten = Split(Input(LOF(1), 1), vbCrLf)
        Close #1
        lngLast = 2 ' Beginne ab Zeile 2

        With Worksheets(ZielTab)
            .Cells.ClearContents ' Vorherige Inhalte löschen
            For lngR = 0 To UBound(arrDaten)
                arrTmp = Split(arrDaten(lngR), cstrDelim)
                If UBound(arrTmp) > -1 Then
                    .Cells(lngLast, 1).Resize(, UBound(arrTmp) + 1) _
                        = Application.Transpose(Application.Transpose(arrTmp))
                    lngLast = lngLast + 1 ' Gehe zur nächsten Zeile
                End If
            Next lngR
        End With
    End If
End Sub
  1. Passe den strFileName-Pfad und den ZielTab-Namen an deine Bedürfnisse an.
  2. Schließe den VBA-Editor und führe das Makro über ALT + F8 aus.

Häufige Fehler und Lösungen

  • Problem: Nur die letzte Zeile der CSV wird importiert.

    • Lösung: Stelle sicher, dass lngLast korrekt erhöht wird und dass .Cells.ClearContents vor dem Import aufgerufen wird.
  • Problem: Fehlermeldung über den Namen der Zieltabelle.

    • Lösung: Überprüfe, ob der Zieltabellenname in Const ZielTab korrekt geschrieben ist und ob das Tabellenblatt existiert.

Alternative Methoden

Wenn du keinen VBA-Code verwenden möchtest, kannst du die CSV-Datei auch manuell über Excel importieren:

  1. Öffne Excel.
  2. Gehe zu Daten > Daten abrufen > Aus Datei > Aus Text/CSV.
  3. Wähle die CSV-Datei aus und folge dem Importassistenten.

Praktische Beispiele

Hier ist ein Beispiel, wie du den oben erwähnten Code anpassen kannst, um Daten aus einer CSV-Datei zu importieren, die in einem anderen Verzeichnis gespeichert ist:

strFileName = "C:\Users\DeinBenutzername\Documents\deineDatei.csv"

Schau dir auch andere Importformate an, die du in Excel verwenden kannst, um zu lernen, wie du die Funktionalität deiner VBA-Importe erweitern kannst.


Tipps für Profis

  • Nutze die InputBox, um den Dateipfad dynamisch abzufragen.
  • Implementiere eine Fehlerbehandlung, um sicherzustellen, dass das Skript bei unerwarteten Fehlern nicht abstürzt.
  • Überlege, die Daten vor dem Import zu validieren, um sicherzustellen, dass sie dem erwarteten Format entsprechen.

FAQ: Häufige Fragen

1. Wie ändere ich das Trennzeichen für den CSV-Import?
Ändere die Konstante cstrDelim, um das gewünschte Trennzeichen festzulegen, z.B. Const cstrDelim As String = "," für Kommas.

2. Kann ich die Importfunktion für verschiedene Excel-Versionen verwenden?
Ja, das Skript funktioniert in Excel-Versionen, die VBA unterstützen (z.B. Excel 2010 und später).

3. Wie kann ich den Import für mehrere CSV-Dateien automatisieren?
Du kannst eine Schleife einfügen, die durch alle CSV-Dateien in einem Verzeichnis iteriert, und den Importcode entsprechend anpassen.

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