vba ein text datei auslesen?
Hallo zusammen,
hat jemand eine Idee, wie ich mit einem Makro die Daten aus einer Textdatei auslesen kann?
Die Daten in Spalte A sind in Excel vorhanden und ich muss in der Textdatei nach diesen Daten suchen
und dann die Daten daneben auslesen.
Vielen Dank im Voraus!!!
1 Antwort
Ich hab es jetzt mal so gemacht, dass ich eine Tabelle (nicht Tabellenblatt) erstellt hab, wo alle Daten aus der Textdatei eingelesen werden. Dann kann man sie später einfach mit XVerweis in deiner Liste suchen lassen. Die Tabelle erstellst du, indem du irgendwo die Überschriften und einen Datensatz hinschreibst, dann die Tabelle markierst und Strg+T drückst.
In meinem Beispiel hab ich eine Tabelle namens "Suchdaten" mit den Spalten "Key" und "Value" erstellt. Achte auch drauf, dass die Zellen alle als Text formatiert sind, sonst wandelt Excel die Zahlen beim Einlesen in 8,88888e+22 oder sowas um.
Die Daten aus der Textdatei kannst du mit diesem Makro in die Tabelle laden
Option Explicit
Public Sub DatenSuchen()
' Alles aus der Textdatei einlesen
Dim inhalt As String
Open "C:\temp\ExcelImport.txt" For Input As #1
Do Until EOF(1)
Dim textline As String
Line Input #1, textline
inhalt = inhalt & textline
Loop
Close #1
' Daten in ein Array laden
Dim rohDaten() As String
rohDaten = Split(inhalt, " ")
' Daten in Tabelle laden, um damit besser arbeiten zu können
Dim i As Integer, suchDaten As ListObject
Set suchDaten = Range("Suchdaten").ListObject
If Not suchDaten.DataBodyRange Is Nothing Then
suchDaten.DataBodyRange.Delete
End If
For i = 0 To UBound(rohDaten) Step 2
Dim newListRow As ListRow
Set newListRow = suchDaten.ListRows.Add
newListRow.Range(1, 1) = rohDaten(i)
newListRow.Range(1, 2) = rohDaten(i + 1)
Next i
End Sub
Und die Suche geht mit XVerweis. Beispielhaft für B2:
=XVERWEIS(A2;Suchdaten[Key];Suchdaten[Value];"nicht vorhanden")
Das kannst du dann einfach runterkopieren
Ich hab dir mal meine Test-Excel auf Github hochgeladen, damit du es dir dort abschauen kannst: TextdateiSuche.xlsm

Ok. Ich hab dir die Funktion mal so umgeschrieben, dass sie die Werte direkt sucht und einfügt ohne den Umweg über einen XVerweis. Ich bezweifle aber, dass das wesentlich schneller ist, weil es in VBA keine HashMaps oder sowas gibt, wo man schnell drin suchen kann. Die Suche geht halt jeden Wert aus der Textdatei einzeln durch.
Option Explicit
Public Sub DatenSuchen()
' Alles aus der Textdatei einlesen
Dim inhalt As String
Open "C:\temp\ExcelImport.txt" For Input As #1
Do Until EOF(1)
Dim textline As String
Line Input #1, textline
inhalt = inhalt & textline
Loop
Close #1
' Daten in ein Array laden
Dim rohDaten() As String
rohDaten = Split(inhalt, " ")
' Daten in ein zweidimensionales Array schreiben
ReDim daten(0 To UBound(rohDaten), 0 To 1) As String
Dim i As Integer
For i = 0 To UBound(rohDaten) Step 2
daten(i / 2, 0) = rohDaten(i)
daten(i / 2, 1) = rohDaten(i + 1)
Next i
' Werte aus Spalte A in Daten suchen und nach B schreiben
Dim tabellenbereich As Range, zeile As Variant
Set tabellenbereich = Intersect(ActiveSheet.UsedRange, ActiveSheet.Range("A:B"))
For Each zeile In tabellenbereich.Rows
Dim suchWert As String
Dim gefundenerWert As String
suchWert = zeile.Columns(1)
gefundenerWert = "nicht vorhanden"
' Wert in Array suchen
For i = 0 To UBound(daten, 1)
If daten(i, 0) = suchWert Then
gefundenerWert = daten(i, 1)
Exit For
End If
Next i
zeile.Columns(2) = gefundenerWert
Next zeile
End Sub
Wenn die Excel-Datei zu groß wird, solltest du auch überlegen, ob es nicht Sinn macht, auf ein Datenbanksystem umzusteigen. Die sind extra dafür gemacht, in großen Datenmengen rumzuwühlen und passende Einträge zueinander zu bringen.
Vielleicht reicht es auch schon, die Excel auf mehrere Excel-Dateien aufzuteilen, damit die einzelnen Dateien jeweils schneller arbeiten, als wenn du einen großen monolithischen Block hast.
Das war eine sehr gute Idee von dir "Excel auf mehrere Excel-Dateien aufzuteilen..." Ich habe das jetzt gemacht und es klappt mit xVerweis Formel sehr gut. Danke für deine Unterstützung!!!
Guten Abend daCypher,
vielen Dank für die ausführliche und schnelle Antwort. Ich habe diese Funktion (XVERWEIS) bereits ausprobiert, aber leider hat es nicht wirklich funktioniert. Mein Problem ist, dass diese Datei sehr groß ist und sobald ich in Excel mit Formeln arbeite, will Excel nicht mehr...es dauert sehr lange (wegen der Berechnung ..unten rechts in Excel) Deshalb dachte ich, dass man die Daten aus der Textdatei direkt per Makro einlesen könnte.
Viele Grüße