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).
Obwohl die Dateiendung *.csv lautet, also comma separated value, wird hier vorausgesetzt, 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.
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
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.
[NachObenLetzte Verweis=„ML: Textdatei (*.csv) importieren (1)”]