VBA Import Textdatei
Hi Leute!
Ich möchte gern eine Textdatei einlesen, im Excel ausgeben und splitten.
Jetzt habe ich schon eine VBA-Formel bekommen:
Sub Import_TxtFile()
Dim X As Double
Dim TXT As String
Open "C:\test.txt" For Input As #1
'Startpunkt
X = 1
Do While Not EOF(1)
Line Input #1, TXT
Cells(1, 1).Offset(X, 0) = TXT
X = X + 1
Loop
Close #1
For j = 1 To X
Text = Split(Cells(j, 1), " ")
For i = 0 To UBound(Text)
Cells(j, i + 1) = Text(i)
Next
Next
End Sub
Problem an der ganzen Sache ist, dass sich die Textdatei ständig automatisch aktualisiert. Ich möchte immer nur die untersten (also neuesten) 70 Zeilen eingelesen haben.
Kann mir jemand den entscheiden Tipp geben.
Ich danke Euch
Ich möchte gern eine Textdatei einlesen, im Excel ausgeben und splitten.
Jetzt habe ich schon eine VBA-Formel bekommen:
Sub Import_TxtFile()
Dim X As Double
Dim TXT As String
Open "C:\test.txt" For Input As #1
'Startpunkt
X = 1
Do While Not EOF(1)
Line Input #1, TXT
Cells(1, 1).Offset(X, 0) = TXT
X = X + 1
Loop
Close #1
For j = 1 To X
Text = Split(Cells(j, 1), " ")
For i = 0 To UBound(Text)
Cells(j, i + 1) = Text(i)
Next
Next
End Sub
Problem an der ganzen Sache ist, dass sich die Textdatei ständig automatisch aktualisiert. Ich möchte immer nur die untersten (also neuesten) 70 Zeilen eingelesen haben.
Kann mir jemand den entscheiden Tipp geben.
Ich danke Euch
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 221471
Url: https://administrator.de/forum/vba-import-textdatei-221471.html
Ausgedruckt am: 19.04.2025 um 08:04 Uhr
24 Kommentare
Neuester Kommentar
HAllo
Probiers mal mit dieser Anpassung
Nach dem einlesen der Datei wird die letzte Zeile mit Inhalt gesucht, und dann 70 abgezogen (Z)
Von dort aus sollte die Auswertung gestartet werden
Close #1
'letzte Zeile mit Inhalt in Spalte A suchen, und 70 abziehen
'= Startpunkt, um Text zu splitten
Z = Range("A65536").End(xlUp).Row - 70
For j = Z To X
Gruss Meierjo
Probiers mal mit dieser Anpassung
Nach dem einlesen der Datei wird die letzte Zeile mit Inhalt gesucht, und dann 70 abgezogen (Z)
Von dort aus sollte die Auswertung gestartet werden
Close #1
'letzte Zeile mit Inhalt in Spalte A suchen, und 70 abziehen
'= Startpunkt, um Text zu splitten
Z = Range("A65536").End(xlUp).Row - 70
For j = Z To X
Gruss Meierjo
Hallo
Habe die Zeile "Z = Range("a65536").End(xlUp).Row"
nochmals neu eingetippt, jetzt funktionierts. War wahrscheinlich ein nicht darstellbares Zeichen im String.
Ja, ist korrekt, er liest alle Zeilen ein, splittet aber nur die letzten 70 Zeilen. Den Rest lässt er stehen.
Wenn du nur die 70 Zeilen einlesen und splitten willst, musst du meines Erachtens 2 Durchgänge machen, zuerst das Textfile einlesen, damit Excel weiss, wieviele Zeilen die Datei enthält, und dann im 2. Anlauf nur die letzten 70 Zeilen einlesen und splitten.
Gruss
Habe die Zeile "Z = Range("a65536").End(xlUp).Row"
nochmals neu eingetippt, jetzt funktionierts. War wahrscheinlich ein nicht darstellbares Zeichen im String.
Ja, ist korrekt, er liest alle Zeilen ein, splittet aber nur die letzten 70 Zeilen. Den Rest lässt er stehen.
Wenn du nur die 70 Zeilen einlesen und splitten willst, musst du meines Erachtens 2 Durchgänge machen, zuerst das Textfile einlesen, damit Excel weiss, wieviele Zeilen die Datei enthält, und dann im 2. Anlauf nur die letzten 70 Zeilen einlesen und splitten.
Gruss
Hallo
Könnte in etwa so aussehen
Sub Import_TxtFile()
Dim X As Double
Dim TXT As String
Open "C:\test lang.txt" For Input As #1
'Startpunkt
X = 0
Do While Not EOF(1)
Line Input #1, TXT
Cells(1, 1).Offset(X, 0) = TXT
X = X + 1
Loop
Close #1
'Zeilen zählen mit Inhalt, abzüglich 70
Z = Range("A65536").End(xlUp).Row - 70
'alle Zeilen löschen, ausser die letzten 70
Range("A1:A" & Z).Delete shift:=xlUp
'die verbleibenden 70 Zeilen splitten
For j = 1 To 70
Text = Split(Cells(j, 1), " ")
For i = 0 To UBound(Text)
Cells(j, i + 1) = Text(i)
Next
Next
End Sub
Gruss meierjo
Könnte in etwa so aussehen
Sub Import_TxtFile()
Dim X As Double
Dim TXT As String
Open "C:\test lang.txt" For Input As #1
'Startpunkt
X = 0
Do While Not EOF(1)
Line Input #1, TXT
Cells(1, 1).Offset(X, 0) = TXT
X = X + 1
Loop
Close #1
'Zeilen zählen mit Inhalt, abzüglich 70
Z = Range("A65536").End(xlUp).Row - 70
'alle Zeilen löschen, ausser die letzten 70
Range("A1:A" & Z).Delete shift:=xlUp
'die verbleibenden 70 Zeilen splitten
For j = 1 To 70
Text = Split(Cells(j, 1), " ")
For i = 0 To UBound(Text)
Cells(j, i + 1) = Text(i)
Next
Next
End Sub
Gruss meierjo
Hallo
Super, wenns klappt, freut mich.
Um die ersten 15 Zeilen zu erhalten, musst du 3 Zeilen umschreiben
'alle Zeilen zählen mit Inhalt
Z = Range("A65536").End(xlUp).Row
'Zeile 16 bis zur letzten löschen
Range("A16:A" & Z).Delete shift:=xlUp
'die verbleibenden 15 Zeilen splitten
For j = 1 To 15
Gruss meierjo
Super, wenns klappt, freut mich.
Um die ersten 15 Zeilen zu erhalten, musst du 3 Zeilen umschreiben
'alle Zeilen zählen mit Inhalt
Z = Range("A65536").End(xlUp).Row
'Zeile 16 bis zur letzten löschen
Range("A16:A" & Z).Delete shift:=xlUp
'die verbleibenden 15 Zeilen splitten
For j = 1 To 15
Gruss meierjo
Hallo
Dazu bräuchte ich am besten die Textdatei, sowie die bestehende Excel-Datei, in der das Makro drin ist.
Dann müsste ich möglichst genau wissen, was da gesplittet werden muss, und was davon dann schlussendlich gebraucht wird.
Wie kompliziert ist denn die Formel?
Kennst du den Makro-Recorder? Damit kannst du die Formel aufzeichnen.
Gruss meierjo
Dazu bräuchte ich am besten die Textdatei, sowie die bestehende Excel-Datei, in der das Makro drin ist.
Dann müsste ich möglichst genau wissen, was da gesplittet werden muss, und was davon dann schlussendlich gebraucht wird.
Wie kompliziert ist denn die Formel?
Kennst du den Makro-Recorder? Damit kannst du die Formel aufzeichnen.
Gruss meierjo
Hallo und guten morgen
Die Zellen kopierst du mit folgenden Teil (zB am Ende des bestehenden Makros einfügen):
Worksheets("Tabelle2").Range("A1:W70").Copy
Worksheets("Tabelle1").Range("A1:W70").PasteSpecial xlPasteValues
Application.CutCopyMode = False
Zum Kennenlernen von Excel und VBA kann ich dir übrigens die Seite http://www.herber.de/ empfehlen.
Hat viele Erklärungen und praktische Beispiele. Damit habe ich bereits vor Jahren meine ersten Geh-Versuche in VBA gemacht.
Gruss Meierjo
Die Zellen kopierst du mit folgenden Teil (zB am Ende des bestehenden Makros einfügen):
Worksheets("Tabelle2").Range("A1:W70").Copy
Worksheets("Tabelle1").Range("A1:W70").PasteSpecial xlPasteValues
Application.CutCopyMode = False
Zum Kennenlernen von Excel und VBA kann ich dir übrigens die Seite http://www.herber.de/ empfehlen.
Hat viele Erklärungen und praktische Beispiele. Damit habe ich bereits vor Jahren meine ersten Geh-Versuche in VBA gemacht.
Gruss Meierjo
Hallo
Dann könntest du im Code in etwa folgendes eingeben:
X = 0
For I = 1 To 120
Line Input #1, TXT
If I > 90 Then
Cells(1, 1).Offset(X, 0) = TXT
X = X + 1
End If
Next
So würde der Code zB die Zeilen 91 bis 120 einlesen
Am Anfang vom Ccode
Cells.Delete shift:=xlUp
leert die ganze Tabelle.
Gruss meierjo
dann müsste es doch auch möglich sein, den punkt 70 Zeilen vor Ende zu finden und nur von hier aus bis zum Ende
Wenn das Textfile immer gleich viele Zeilen hat, dann jaDann könntest du im Code in etwa folgendes eingeben:
X = 0
For I = 1 To 120
Line Input #1, TXT
If I > 90 Then
Cells(1, 1).Offset(X, 0) = TXT
X = X + 1
End If
Next
So würde der Code zB die Zeilen 91 bis 120 einlesen
Ein weiteres Problem, was ich noch habe, ist das die Texte unterschiedlich viele Spalten haben. Und wenn ich dann die
aktualisierte Textdatei einlese und sich Zeilen verkürzt haben, bleibt vom vorhergehenden Import noch etwas stehen. Man
müsste also das Tabellenblatt in einem bestimmtem Bereich vor dem nächsten Import löschen.
aktualisierte Textdatei einlese und sich Zeilen verkürzt haben, bleibt vom vorhergehenden Import noch etwas stehen. Man
müsste also das Tabellenblatt in einem bestimmtem Bereich vor dem nächsten Import löschen.
Am Anfang vom Ccode
Cells.Delete shift:=xlUp
leert die ganze Tabelle.
Gruss meierjo
Hallo
wie lange ist den die Textdatei?? Wenn ich eine Textdatei mit ca 50'000 Zeilen einlese, dauert das Einlesen ca 3 Sekunden.
Ich denke, das sollte schnell genug sein.
Wenn zuerst alles eingelesen werden soll, und dann zB nur die letzten 70 weiter verwertet werden, dauert das mE gleich lange, wie wenn du alle eingelesenen Zeilen schreibst.
Gruss meierjo
wie lange ist den die Textdatei?? Wenn ich eine Textdatei mit ca 50'000 Zeilen einlese, dauert das Einlesen ca 3 Sekunden.
Ich denke, das sollte schnell genug sein.
Wenn zuerst alles eingelesen werden soll, und dann zB nur die letzten 70 weiter verwertet werden, dauert das mE gleich lange, wie wenn du alle eingelesenen Zeilen schreibst.
Gruss meierjo