Textdatei (*.csv) importieren (1)

Excel, alle Ver­sio­nen

Um eine Text­datei zu in eine Excel-Tabelle zu importieren, gibt es viele Möglichkeit­en. Die meis­ten davon sind „per Hand” und erfüllen ihren Zweck auch gut bis sehr gut. Manche dieser Vorge­hensweisen verknüpfen sog­ar die Aus­gangs­dat­en mit der Tabelle, sodass stets die aktuellen Dat­en im Excel-Sheet sicht­bar sind.

Auch mit einem Makro (VBA) gibt es mehrere Wege, solche Dat­en zu importieren. Grund­sät­zlich gilt hier, dass die Dat­en in der Tabelle anschließend als Wert vor­liegen, also nicht verknüpft sind oder ähn­lich. Selb­stre­dend sind auch keine Formeln enthal­ten. Das Grund­prinzip bei diesem Vorge­hen ist immer gle­ich. Hier fol­gt gle­ich zur Illus­tra­tion ein Code, abso­lut „quick and dirty” und ohne „Sicher­heits­gurt”, aber das Pro­gramm läuft. Eine kurze Erk­lärung zum Code:

  • Der Pfad für die Text­datei ist fest­gelegt: C:\Daten\Textdatei.csv (Sie wer­den ihn wahrschein­lich anpassen)
  • Die Dat­en-Felder sind mit Semi­kolon ( ;) getren­nt
  • Texte sind nicht mit Anführungsze­ichen einge­fasst
  • Die Texte an sich enthal­ten kein Semi­kolon (oder das Zeichen, welch­es als Tren­ner für die Daten­felder ver­wen­det wird).

▲ nach oben …

Obwohl die Dateien­dung *.csv lautet, also comma separat­ed value, wird hier voraus­ge­setzt, dass die lan­destyp­is­chen Trennze­ichen ver­wen­det wer­den. In den USA ist es das Kom­ma, bei uns das Semi­kolon (Strich­punkt). Das ist deswe­gen so wichtig, weil auf diese Weise auch ganz nor­male Texte ein­ge­le­sen wer­den kön­nen. Je nach Excel-Ver­sion kann die (obere) Gren­ze der Zeichen­zahl je Zeile aber bei 255 liegen! Der Code zum ein­le­sen kön­nte dann so ausse­hen:

<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 aus­pro­bieren wollen, die Text­datei liegt hier zum herun­ter­laden bere­it. Aus Grün­den des Daten­schutzes ist das File gepackt und mit einem Pass­wort verse­hen. Es lautet: GMG-CC. (Soll­ten Sie damit nicht klar kom­men, senden Sie uns bitte eine Mail. Wir schick­en Ihnen dann eine ungepack­te Ver­sion zu.) Jet­zt noch die Funk­tion­al­ität Dat­en–> Text in Spal­ten und das sieht alles recht gut aus. Der let­zte Schritt war (nur) erforder­lich, weil Sie zwar ganze Zeilen in eine Zelle geschrieben haben, diese Zeile aber eigentlich die Zusam­men­fas­sung mehrerer Spal­ten war. Es kön­nte ja auch eine Zeile eines Gedichts gewe­sen sein, dann wäre alles so in Ord­nung gewe­sen.

▲ nach oben …

Mit ein­er wirk­lich kleinen Änderung im Code kom­men Sie erhe­blich ele­gan­ter 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 Erk­lärung dazu kann ganz hil­fre­ich sein. Die Funk­tion Split() tren­nt die ein­ge­le­sene Zeile an den vorgegebe­nen Trennstellen (delim­iters, hier: die Semi­ko­la) und schreibt die aus­geeinzel­ten Zellen in ein Array. Mit­tels UBound() stelle ich fest, wie viele Ele­mente erzeugt wor­den sind.

Und last but not least: Den Source­code kön­nen Sie zum importieren in eine Excel-Datei (genauer gesagt: den VBA-Edi­tor) hier als *.cls-Datei (in gepack­ter Form als *.zip) herun­ter­laden.

Wir zeigen Ihnen noch weit­ere Import-Lösun­gen, teil­weise mit tiefer­ge­hen­der Beschrei­bung. Schauen Sie ein­fach ab und zu hier im Blog nach, es lohnt sich gewiss. Tipp: Arbeit­en Sie mit der Suche (ganz oben rechts) und geben Sie beispiel­sweise csv importieren als Para­me­ter ein. Auch die Kat­e­gorie Dat­en-Import hil­ft weit­er.

Hin­weis: Wenn Sie mehr über die Grund­la­gen der Text-Importe (ein­schließlich *.csv) wis­sen möcht­en, dann schauen Sie auch gerne hier im Blog vor­bei. Im zweit­en Kapi­tel (Text-Dateien) wer­den Sie gewiss rasch fündig. „Offiziell” geht es hier mit dem zweit­en Teil des Text-Imports weit­er, wo auch ver­schiedene Grund­la­gen sehr aus­führlich disku­tiert wer­den.

[NachOben­Let­zte Verweis=„ML: Text­datei (*.csv) importieren (1)”]

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