Textdatei (*.csv) importieren (1)

Excel, alle Versionen

Um eine Textdatei zu in eine Excel-Tabelle zu importieren, gibt es viele Möglichkeiten. Die meisten davon sind „per Hand“ und erfüllen ihren Zweck auch gut bis sehr gut. Manche dieser Vorgehensweisen verknüpfen sogar die Ausgangsdaten mit der Tabelle, sodass stets die aktuellen Daten im Excel-Sheet sichtbar sind.

Auch mit einem Makro (VBA) gibt es mehrere Wege, solche Daten zu importieren. Grundsätzlich gilt hier, dass die Daten in der Tabelle anschließend als Wert vorliegen, also nicht verknüpft sind oder ähnlich. Selbstredend sind auch keine Formeln enthalten. Das Grundprinzip bei diesem Vorgehen ist immer gleich. Hier folgt gleich zur Illustration ein Code, absolut „quick and dirty“ und ohne „Sicherheitsgurt“, aber das Programm läuft. Eine kurze Erklärung zum Code:

  • Der Pfad für die Textdatei ist festgelegt: C:\Daten\Textdatei.csv (Sie werden ihn wahrscheinlich anpassen)
  • Die Daten-Felder sind mit Semikolon ( ;) getrennt
  • Texte sind nicht mit Anführungszeichen eingefasst
  • Die Texte an sich enthalten kein Semikolon (oder das Zeichen, welches als Trenner für die Datenfelder verwendet wird).

▲ nach oben …

Obwohl die Dateiendung *.csv lautet, also comma separated value, wird hier voraus­ge­setzt, dass die landestypischen Trennzeichen verwendet werden. In den USA ist es das Komma, bei uns das Semikolon (Strichpunkt). Das ist deswegen so wichtig, weil auf diese Weise auch ganz normale Texte eingelesen werden können. Je nach Excel-Version kann die (obere) Grenze der Zeichenzahl je Zeile aber bei 255 liegen! Der Code zum einlesen könnte dann so aussehen:

<class="Code_LeerzeileFolgt">Option Explicit
Sub csvDataLesen()
   Dim SourcePath As String
   Dim FFnr As Integer
   Dim TxtZeile As String
   Dim AnzZe As Long, i As Long
   
   SourcePath = "C:\Data\Textdatei_1.csv"
   FFnr = FreeFile
   Open SourcePath For Input As #FFnr
   Do While Not EOF(FFnr)  'Zeilenzahl feststellen
      Line Input #FFnr, TxtZeile
      AnzZe = AnzZe + 1
   Loop
   Close #FFnr
   FFnr = FreeFile
   Open SourcePath For Input As #FFnr
   ReDim aZeilen(AnzZe)
   Do While Not EOF(FFnr)  'Zeilenzahl feststellen
      For i = 1 To AnzZe
         Line Input #FFnr, TxtZeile
         Cells(i, 1) = TxtZeile
      Next i
   Loop
   Close #FFnr
End Sub

Wenn Sie es ausprobieren wollen, die Textdatei liegt hier zum herunterladen bereit. Aus Gründen des Datenschutzes ist das File gepackt und mit einem Passwort versehen. Es lautet: GMG-CC. (Sollten Sie damit nicht klar kommen, senden Sie uns bitte eine Mail. Wir schicken Ihnen dann eine ungepackte Version zu.) Jetzt noch die Funktionalität Daten–> Text in Spalten und das sieht alles recht gut aus. Der letzte Schritt war (nur) erforderlich, weil Sie zwar ganze Zeilen in eine Zelle geschrieben haben, diese Zeile aber eigentlich die Zusammenfassung mehrerer Spalten war. Es könnte ja auch eine Zeile eines Gedichts gewesen sein, dann wäre alles so in Ordnung gewesen.

▲ nach oben …

Mit einer wirklich kleinen Änderung im Code kommen Sie erheblich eleganter zum Ziel:

Sub csvDataLesen_2()
   Dim SourcePath As String
   Dim FFnr As Integer
   Dim TxtZeile As String
   Dim AnzZe As Long, AnzSp As Integer, i As Long
   SourcePath = "C:\Data\Textdatei_1.csv"
   FFnr = FreeFile
   Open SourcePath For Input As #FFnr
   Do While Not EOF(FFnr)  'Zeilenzahl feststellen
      Line Input #FFnr, TxtZeile
      AnzZe = AnzZe + 1
   Loop
   Close #FFnr
   FFnr = FreeFile
   Open SourcePath For Input As #FFnr
   ReDim aZeilen(AnzZe)
   Do While Not EOF(FFnr)  'Zeilenzahl feststellen
      For i = 1 To AnzZe
         Line Input #FFnr, TxtZeile
         If i = 1 Then AnzSp = UBound(Split(TxtZeile, ";")) + 1
         Range(Cells(i, 1), Cells(i, AnzSp)) = Split(TxtZeile, ";")
      Next i
   Loop
   Close #FFnr
End Sub

▲ nach oben …

Eine kurze Erklärung dazu kann ganz hilfreich sein. Die Funktion Split() trennt die eingelesene Zeile an den vorgegebenen Trennstellen (delimiters, hier: die Semikola) und schreibt die ausgeeinzelten Zellen in ein Array. Mittels UBound() stelle ich fest, wie viele Elemente erzeugt worden sind.

Und last but not least: Den Sourcecode können Sie zum importieren in eine Excel-Datei (genauer gesagt: den VBA-Editor) hier als *.cls-Datei (in gepackter Form als *.zip) herunterladen.

Wir zeigen Ihnen noch weitere Import-Lösungen, teilweise mit tiefergehender Beschreibung. Schauen Sie einfach ab und zu hier im Blog nach, es lohnt sich gewiss. Tipp: Arbeiten Sie mit der Suche (ganz oben rechts) und geben Sie beispielsweise csv importieren als Parameter ein. Auch die Kategorie Daten-Import hilft weiter.

Hinweis: Wenn Sie mehr über die Grundlagen der Text-Importe (einschließlich *.csv) wissen möchten, dann schauen Sie auch gerne hier im Blog vorbei. Im zweiten Kapitel (Text-Dateien) werden Sie gewiss rasch fündig. „Offiziell“ geht es hier mit dem zweiten Teil des Text-Imports weiter, wo auch verschiedene Grundlagen sehr ausführlich diskutiert werden.

▲ nach oben …

Dieser Beitrag wurde unter Daten-Import / -Export, Mit VBA/Makro, Musterlösungen, Text abgelegt und mit , , , , , , , , verschlagwortet. Setze ein Lesezeichen auf den Permalink.