VBA – Textdateien lesen (Lesen, Parsen und Importieren)
In this Article
In diesem Tutorial zeigen wir Ihnen, wie Sie Inhalte aus Textdateien lesen und mit VBA in Arbeitsblätter einfügen können.
Inhalt einer Textdatei in ein Arbeitsblatt einlesen
Der einfachste Weg, den Inhalt einer Textdatei zu lesen, besteht darin, ihn in eine Zelle eines Arbeitsblatts zu kopieren.
Sub FSOTextdateiInhaltEinfuegen()
Dim FSO As New FileSystemObject
Set FSO = CreateObject("Scripting.FileSystemObject")
Set DateiZumLesen = FSO.OpenTextFile("C:\Test\TestDatei.txt", ForReading) 'Hier den Pfad zu Ihrer Textdatei einfügen
TextZeichenkette = DateiZumLesen.ReadAll
DateiZumLesen.Close
ThisWorkbook.Sheets(1).Range("A1").Value = TextZeichenkette 'Sie können das Arbeitsblatt und die Zelle angeben, in die der Inhalt der Textdatei eingefügt werden soll
End Sub
Der obige Code verwendet das FileSystemObject. Um es verwenden zu können, müssen Sie einen Verweis auf die VB-Skript-Laufzeitbibliothek (Engl. VB Script Run-Time Library) setzen. Siehe hier für weitere Informationen.
Ohne die Verwendung von FileSystemObject können Sie den Inhalt Ihrer Textdatei mit dem folgenden Code einfügen. Wenn Ihre Textdatei einen Zeilentrenner enthält, wird sie Zeile für Zeile eingefügt.
Sub TextdateiInhaltEinfuegen()
Dim wbExcel As Workbook, wbText As Workbook
Dim wsExcel As Worksheet
Set wbExcel = ThisWorkbook 'hier angeben, in welche Excel-Datei der Inhalt der Textdatei eingefügt werden soll
Set wsExcel = wbExcel.Sheets(1) 'hier angeben, welches Arbeitsblatt verwendet werden soll
Set wbText = Workbooks.Open("C:\Test\TestDatei.txt") 'Hier den Pfad Ihrer Textdatei einfügen
wbText.Sheets(1).Cells.Copy wsExcel.Cells
wbText.Close SaveChanges:=False
End Sub
Inhalt einer Textdatei zeilenweise oder spaltenweise einlesen
Ihre Textdatei kann mehrere Zeilen und mehrere Elemente enthalten, die in den Zeilen durch Komma, Semikolon, Tabulator, Leerzeichen usw. getrennt sind. Um den Inhalt der Textdatei korrekt zu lesen und einzufügen, benötigen Sie möglicherweise den folgenden Code:
Sub TextdateiInhaltEinfuegen_MitTrennzeichen()
Dim StrZeile As String
Dim FSO As New FileSystemObject
Dim TSO as Object
Dim StrZeilenElemente As Variant
Dim Index As Long
Dim i As Long
Dim Trennzeichen as String
Set FSO = CreateObject("Scripting.FileSystemObject")
Set TSO = FSO.OpenTextFile("C:\Test\TestDatei.txt")
Trennzeichen=", " 'Das Trennzeichen, das in Ihrer Textdatei verwendet wird
Index = 1
Do While TSO.AtEndOfStream = False
StrZeile = TSO.ReadLine
StrZeilenElemente = Split(StrZeile, Trennzeichen)
For i = LBound(StrZeilenElemente) To UBound(StrZeilenElemente)
Cells(Index, i + 1).Value = StrZeilenElemente(i) 'dieser Code beginnt mit dem Einfügen des Inhalts der Textdatei aus der Zelle A1 (Cell(1,1)) des aktiven Arbeitsblatts
Next i
Index = Index + 1
Loop
TSO.Close
End Sub
Das Trennzeichen, das in Ihrer Textdatei verwendet wird, kann ein Komma („,“), ein Komma mit Leerzeichen („, „), ein Semikolon („;“), ein Semikolon mit Leerzeichen („; „), ein Leerzeichen (“ „), ein Tabulator (setzen Sie dann Trennzeichen = vbTab) oder in seltenen Fällen ein anderes Zeichen sein.
Textdateien in Arrays einlesen
Wenn Sie den Inhalt Ihrer Textdatei in ein Array einlesen und Zeile für Zeile bzw. Spalte für Spalte in Ihr Arbeitsblatt einfügen möchten, benötigen Sie den folgenden Code:
Sub GetrennteTextdateiInArrayEinlesen()
Dim Trennzeichen As String
Dim TextDatei As Integer
Dim DateiPfad As String
Dim DateiInhalt As String
Dim ZeilenArray() As String
Dim DatenArray() As String
Dim TempArray() As String
Dim rw As Long, col As Long
Trennzeichen = vbTab 'Das Trennzeichen, das in Ihrer Textdatei verwendet wird
DateiPfad = "C:\Test\TestDateiTab.txt"
rw = 1
TextDatei = FreeFile
Open DateiPfad For Input As TextDatei
DateiInhalt = Input(LOF(TextDatei), TextDatei)
TextDatei Close
ZeilenArray() = Split(DateiInhalt, vbNewLine) 'vbNewLine in vbCrLf oder vbLf ändern, je nachdem, welches Zeilentrennzeichen in Ihrer Textdatei verwendet wird
For x = LBound(ZeilenArray) To UBound(ZeilenArray)
If Len(Trim(ZeilenArray(x))) <> 0 Then
TempArray = Split(ZeilenArray(x), Trennzeichen)
col = UBound(TempArray)
ReDim Preserve DatenArray(col, rw)
For y = LBound(TempArray) To UBound(TempArray)
DatenArray(y, rw) = TempArray(y)
Cells(x + 1, y + 1).Value = DatenArray(y, rw) 'dieser Code beginnt mit dem Einfügen des Inhalts der Textdatei aus der Zelle A1 (Cell(1,1)) des aktiven Arbeitsblatts
Next y
End If
rw = rw + 1
Next x
End Sub
Zeilentrenner in Ihrer Textdatei können die Kombination aus Wagenrücklauf und Zeilenvorschub (Chr (13) + Chr (10)) oder Zeilenvorschub (Chr (10)) sein. Verwenden Sie entsprechend vbCrLf oder vbLf. Wenn Sie sich nicht sicher sind, verwenden Sie vbNewLine zur Angabe des Zeilentrenners.