Aus mehreren .txt bestimmte Werte auslesen und in ein Excelsheet schreiben
Hallo,
Bin neu hier und bräuchte eine schnelle Lösung.
Wir haben einige hundert .txt Dateien. in denen stehen definierte Inhalte mit Werten. Nun möchte ich alle .txt auf bestimmte Einträge durchsuchen und die gefunden Einträge in ein Ecxelblatt untereinander einfügen.
Beispiel:
dateiname.txt
Codename Penryn
Specification Intel(R) Core(TM)2 Duo CPU T9300 @ 2.50GHz
Package (platform ID) Socket P (478) (0x7)
CPUID 6.7.6
Extended CPUID 6.17
Core Stepping C0
Technology 45 nm
erhalten möchte ich nun:
Excel:
A:B:C:D
dateiname:Penryn:Intel(R) Core(TM)2 Duo CPU T9300 @ 2.50GHz:45 nm
wobei ich noch weitere Werte erhalten möchte (max.10)
Kann mir da jemand BITTE helfen, kannmich einfach viel zu wenig damit aus....
Danke
Harry
Bin neu hier und bräuchte eine schnelle Lösung.
Wir haben einige hundert .txt Dateien. in denen stehen definierte Inhalte mit Werten. Nun möchte ich alle .txt auf bestimmte Einträge durchsuchen und die gefunden Einträge in ein Ecxelblatt untereinander einfügen.
Beispiel:
dateiname.txt
Codename Penryn
Specification Intel(R) Core(TM)2 Duo CPU T9300 @ 2.50GHz
Package (platform ID) Socket P (478) (0x7)
CPUID 6.7.6
Extended CPUID 6.17
Core Stepping C0
Technology 45 nm
erhalten möchte ich nun:
Excel:
A:B:C:D
dateiname:Penryn:Intel(R) Core(TM)2 Duo CPU T9300 @ 2.50GHz:45 nm
wobei ich noch weitere Werte erhalten möchte (max.10)
Kann mir da jemand BITTE helfen, kannmich einfach viel zu wenig damit aus....
Danke
Harry
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 135124
Url: https://administrator.de/forum/aus-mehreren-txt-bestimmte-werte-auslesen-und-in-ein-excelsheet-schreiben-135124.html
Ausgedruckt am: 09.04.2025 um 07:04 Uhr
25 Kommentare
Neuester Kommentar
"Kann mir da jemand BITTE helfen, kannmich einfach viel zu wenig damit aus...."
Nichts für ungut, aber es gibt sowas wie eine SUFU.
Suche einfach mal nach
- "Textdatei in Excel auslesen"
- "per VBA Textdateien auslesen"
oder ähnlichem.
Es gibt soooooo viele schön dokumentierte Quellen.
Und der beste Weg die eigene Unkenntnis zu vertreiben ist die anfangen zu lesen und nicht wenn einer eine Lösung geliefert hat, per C&P übernehmen und freuen.
Edit:
mal so als Tipp am Rande:
Daten mit bestimmten Kriterien aus Textdatei in Excel einlesen
Nichts für ungut, aber es gibt sowas wie eine SUFU.
Suche einfach mal nach
- "Textdatei in Excel auslesen"
- "per VBA Textdateien auslesen"
oder ähnlichem.
Es gibt soooooo viele schön dokumentierte Quellen.
Und der beste Weg die eigene Unkenntnis zu vertreiben ist die anfangen zu lesen und nicht wenn einer eine Lösung geliefert hat, per C&P übernehmen und freuen.
Edit:
mal so als Tipp am Rande:
Daten mit bestimmten Kriterien aus Textdatei in Excel einlesen
@H41mSh1C0R

Sollte sich aber mit VBA auch anhand der Feldnamen lösen lassen:
Grüße
bastla
^^ das Leerzeichen als Delimiter ist auch übel xD
Wer will's schon leicht haben ... Sollte sich aber mit VBA auch anhand der Feldnamen lösen lassen:
Sub Sammeln()
Ordner = "D:\Daten"
Dateityp = LCase("txt")
Felder = Array("Codename", "Specification", "Technology", "Core Stepping")
MaxFeldIndex = UBound(Felder)
Dim FeldL() As Integer
ReDim FeldL(MaxFeldIndex)
For i = 0 To MaxFeldIndex
FeldL(i) = Len(Felder(i))
Next
Zeile = 2
Rows(CStr(Zeile) & ":65536").ClearContents
Set fso = CreateObject("Scripting.FileSystemObject")
For Each Datei In fso.GetFolder(Ordner).Files
If LCase(fso.GetExtensionname(Datei.Name)) = Dateityp Then
Daten = Datei.OpenAsTextStream.ReadAll
Cells(Zeile, 1) = fso.GetBaseName(Datei.Name)
For i = 0 To MaxFeldIndex
Pos = InStr(Daten, Felder(i))
If Pos > 0 Then
Wert = Trim(Split(Mid(Daten, Pos + FeldL(i)), vbCrLf)(0))
Cells(Zeile, i + 2).Value = Wert
End If
Next
Zeile = Zeile + 1
End If
Next
End Sub
bastla
Hallo harry8m!
Ändere die Zeile 25 auf
... und das "
Grüße
bastla
Nur noch eins, beim Ausführen kommen die Zwischenräume als "Kästchen", sind wahrscheinlich TABs
Deshalb meine Frage oben ...Ändere die Zeile 25 auf
Wert = Replace(Split(Mid(Daten, Pos + FeldL(i)), vbCrLf)(0), vbTab, "")
Replace()
" hättest Du tatsächlich in dem von H41mSh1C0R verlinkten Beitrag gefunden.Grüße
bastla
Zitat von @bastla:
@H41mSh1C0R
> ^^ das Leerzeichen als Delimiter ist auch übel xD
Wer will's schon leicht haben ...
Sollte sich aber mit VBA auch anhand der Feldnamen lösen lassen:
Grüße
bastla
@H41mSh1C0R
> ^^ das Leerzeichen als Delimiter ist auch übel xD
Wer will's schon leicht haben ...
Sollte sich aber mit VBA auch anhand der Feldnamen lösen lassen:
Sub Sammeln()
>
> Ordner = "D:\Daten"
> Dateityp = LCase("txt")
> Felder = Array("Codename", "Specification", "Technology", "Core Stepping")
>
> MaxFeldIndex = UBound(Felder)
> Dim FeldL() As Integer
> ReDim FeldL(MaxFeldIndex)
> For i = 0 To MaxFeldIndex
> FeldL(i) = Len(Felder(i))
> Next
>
> Zeile = 2
> Rows(CStr(Zeile) & ":65536").ClearContents
>
> Set fso = CreateObject("Scripting.FileSystemObject")
> For Each Datei In fso.GetFolder(Ordner).Files
> If LCase(fso.GetExtensionname(Datei.Name)) = Dateityp Then
> Daten = Datei.OpenAsTextStream.ReadAll
> Cells(Zeile, 1) = fso.GetBaseName(Datei.Name)
> For i = 0 To MaxFeldIndex
> Pos = InStr(Daten, Felder(i))
> If Pos > 0 Then
> Wert = Trim(Split(Mid(Daten, Pos + FeldL(i)), vbCrLf)(0))
> Cells(Zeile, i + 2).Value = Wert
> End If
> Next
> Zeile = Zeile + 1
> End If
> Next
> End Sub
>
bastla
Hallo zusammen,
Bin ein totaler Neuling und bin nach langem Googlen auf diese Seite gestossen.
War genau auf der Suche nach so einem VBA Script (Vielen Dank für das Bereitstellen). Habe die Felder meinen Bedürfnissen angepasst, aber nach einer Weile einlesen kommt der Eintrag:
Input paste end of file.
Habe schon alles versucht und das ganze Web durchforstet, aber irgendwie bringe ich das nicht hin.
Kann mir da jemand helfen?
Hab schon alles versucht, aber bis jetzt habe ich noch keine Lösung
Gruss
Garfield81
Bastla du bist der beste 
Genau das war es, auf das wäre ich nie gekommen. (Wie gesagt noch ein totaler Neuling, man sieht zum Teil vor lauter Bäumen den Wald nicht mehr)
Vielleicht kannst du mir noch eine Frage beantworten,
Ich habe im Ordner folgende Text Dateien:
chzu......txt
chru....txt
chrg....txt
chgs...txt
chmb....txt
zusammen sind es ca. 900 Text Dateien
Ich brauche aber nur alle Text Dateien von chzu, chru, chrg im Excel aufgelistet. Kann man die anderen irgendwie Ausfiltern lassen.
Text Dateien dürfen im Ordner aber nicht gelöscht werden.
Vielen Lieben Dank
Grüsse
Garfield81
Genau das war es, auf das wäre ich nie gekommen. (Wie gesagt noch ein totaler Neuling, man sieht zum Teil vor lauter Bäumen den Wald nicht mehr)
Vielleicht kannst du mir noch eine Frage beantworten,
Ich habe im Ordner folgende Text Dateien:
chzu......txt
chru....txt
chrg....txt
chgs...txt
chmb....txt
zusammen sind es ca. 900 Text Dateien
Ich brauche aber nur alle Text Dateien von chzu, chru, chrg im Excel aufgelistet. Kann man die anderen irgendwie Ausfiltern lassen.
Text Dateien dürfen im Ordner aber nicht gelöscht werden.
Vielen Lieben Dank
Grüsse
Garfield81
Hallo garfield81!
In diesem Fall müsstest Du zwischen Zeile 4 und 5 einfügen:
und die Zeile 19 durch
ersetzen (ungetestet).
Die in Zeile 4 angegebenen Werte ("chzu" etc) müssen in Kleinbuchstaben geschrieben und, wie gezeigt, durch "#" begrenzt sein.
Grüße
bastla
In diesem Fall müsstest Du zwischen Zeile 4 und 5 einfügen:
Prefix = "#chzu#chru#chrg#" 'nur Dateien, deren Name mit diesen Zeichen beginnt, verarbeiten
PrefixLen = 4 'einheitliche Länge des Präfixes (Zeichenanzahl)
If LCase(fso.GetExtensionname(Datei.Name)) = Dateityp And Datei.Size > 0 And InStr(Prefix, "#" & LCase(Left(Datei.Name, PrefixLen)) & "#") > 0 Then
Die in Zeile 4 angegebenen Werte ("chzu" etc) müssen in Kleinbuchstaben geschrieben und, wie gezeigt, durch "#" begrenzt sein.
Grüße
bastla
Hallo bastla
ersetzt und es funktioniert 1A
Unglaublich wie du das so schnell aus dem Ärmel zückst. Da muss ich noch sehr, sehr viel lernen bis ich so weit bin
Jetzt sehe ich im Excel nur noch dass was ich will. Genial
Jetzt fehlt mir nur noch das Änderungsdatum der Files und dann bin ich überglücklich.
Habe es mit FileDateTime versucht, aber geht leider nicht. Bin da glaube ich auf dem falschen Weg.
Grüsse
Garfield
ersetzt und es funktioniert 1A
Unglaublich wie du das so schnell aus dem Ärmel zückst. Da muss ich noch sehr, sehr viel lernen bis ich so weit bin
Jetzt sehe ich im Excel nur noch dass was ich will. Genial
Jetzt fehlt mir nur noch das Änderungsdatum der Files und dann bin ich überglücklich.
Habe es mit FileDateTime versucht, aber geht leider nicht. Bin da glaube ich auf dem falschen Weg.
Grüsse
Garfield
Hallo garfield81!
Poste doch bitte Deinen aktuellen Code (unter Verwendung der passenden Formatierung) und erkläre auch kurz, was Du mit "falsch formatiert" meinst ...
Grüße
bastla
Poste doch bitte Deinen aktuellen Code (unter Verwendung der passenden Formatierung) und erkläre auch kurz, was Du mit "falsch formatiert" meinst ...
Grüße
bastla
Zitat von @garfield81:
Hallo bastla,
Danke für den Input.
Klappt soweit, aber nun kommt immer die Meldung Objekt erforderlich und das Datum ist falsch formatiert.
Danke und Güsse
Garfield81
Hallo bastla,
Danke für den Input.
Klappt soweit, aber nun kommt immer die Meldung Objekt erforderlich und das Datum ist falsch formatiert.
Danke und Güsse
Garfield81
Habe mich vertippt, darum kam die Meldung Objekt erforderlich
Aber das Datum formatiert er nicht korrekt:
Excel --> 13.01.1900 00:43:12
Datei --> 13.03.2014 15:26
Hast du eine Ahnung woran das liegen könnte?
Grüsse
Garfield81
Hier mein Code:
Next
Zeile = 2
Rows(CStr(Zeile) & ":655360").ClearContents
Set fso = CreateObject("Scripting.FileSystemObject")
For Each Datei In fso.GetFolder(Ordner).Files
If LCase(fso.GetExtensionname(Datei.Name)) = Dateityp And Datei.Size > 0 And InStr(Prefix, "#" & LCase(Left(Datei.Name, PrefixLen)) & "#") > 0 Then
Daten = Datei.OpenAsTextStream.ReadAll
Cells(Zeile, 9) = fso.GetBaseName(Datei.Name)
Cells(Zeile, 10) = fso.GetBaseName(Datei.DateLastModified)
For i = 0 To MaxFeldIndex
Pos = InStr(Daten, Felder(i))
If Pos > 0 Then
Wert = Trim(Split(Mid(Daten, Pos + FeldL(i)), vbCrLf)(0))
Cells(Zeile, i + 1).Value = Wert
End If
Next
Zeile = Zeile + 1
End If
Next
MsgBox "Daten Aktualisiert"
End Sub
Grüsse
Garfield81
Next
Zeile = 2
Rows(CStr(Zeile) & ":655360").ClearContents
Set fso = CreateObject("Scripting.FileSystemObject")
For Each Datei In fso.GetFolder(Ordner).Files
If LCase(fso.GetExtensionname(Datei.Name)) = Dateityp And Datei.Size > 0 And InStr(Prefix, "#" & LCase(Left(Datei.Name, PrefixLen)) & "#") > 0 Then
Daten = Datei.OpenAsTextStream.ReadAll
Cells(Zeile, 9) = fso.GetBaseName(Datei.Name)
Cells(Zeile, 10) = fso.GetBaseName(Datei.DateLastModified)
For i = 0 To MaxFeldIndex
Pos = InStr(Daten, Felder(i))
If Pos > 0 Then
Wert = Trim(Split(Mid(Daten, Pos + FeldL(i)), vbCrLf)(0))
Cells(Zeile, i + 1).Value = Wert
End If
Next
Zeile = Zeile + 1
End If
Next
MsgBox "Daten Aktualisiert"
End Sub
Grüsse
Garfield81
Hallo garfiel81!
Sorry - kann ich nicht nachvollziehen. Auch ohne eine Zellformatierung vorzunehmen wird bei mir (Excel 2010) das Datum nach einem Test mit
im Format "TT.MM.JJJJ hh:mm" angezeigt.
[Edit] Posts haben sich zeitlich überschnitten ...
In Deiner Zeile 24 hast Du ein unnötiges "
[/Edit]
Grüße
bastla
Sorry - kann ich nicht nachvollziehen. Auch ohne eine Zellformatierung vorzunehmen wird bei mir (Excel 2010) das Datum nach einem Test mit
Cells(Zeile, "M").Value = Datei.DateLastModified
[Edit] Posts haben sich zeitlich überschnitten ...
In Deiner Zeile 24 hast Du ein unnötiges "
fso.GetBaseName()
" (damit wird aus einem Dateinamen nur der Name, ohne Dateityp, extrahiert, was natürlich bei einer Datumsangabe alles ab dem letzten Punkt = ab der Jahreszahl wegschneidet).[/Edit]
Grüße
bastla
Hallo Bastla,
Hmmm Sorry mein Fehler, hab das Buch VBA mit Excel vor mir und dort ist es auch mit
beschrieben.
Aber hab zu wenig ins Buch geschaut und zu stark auf den Code oberhalb
und diesen kopiert und verändert... Und das war auch gleich der Fehler.
Nun klappt es auf jeden Fall.
Vielen Dank
Grüsse
Garfield81
Hmmm Sorry mein Fehler, hab das Buch VBA mit Excel vor mir und dort ist es auch mit
Cells(Zeile, "M").Value = Datei.DateLastModified
beschrieben.
Aber hab zu wenig ins Buch geschaut und zu stark auf den Code oberhalb
Cells(Zeile, 9) = fso.GetBaseName(Datei.Name)
und diesen kopiert und verändert... Und das war auch gleich der Fehler.
Nun klappt es auf jeden Fall.
Vielen Dank
Grüsse
Garfield81
Hallo Bastla,
Danke nochmals für deine Hilfe, stand so einige male auf dem Schlauch......
Wie gesagt muss noch viel lernen was VBA Codes angeht.
Ich bin dir jetzt schon Dankbar, für das beantworten meiner Zukünftigen Fragen
Komme so langsam auf den Geschmack und werde sicherlich noch einiges mit VBA Codierung ausprobieren.
Und da könnten schon noch ein paar fragen auftauchen.
Grüsse
Garfield81
Hallo Zusammen,
ich bin ebenfalls VBA Neuling und komme mit Google nicht weiter.
Ich habe Dateien mit der Formatierung mit variabler Blockanzahl...
.. und würde daraus gerne die erste Anfangszeit und die letzte Arbeitszeit auslesen und nicht direkt in Felder, sondern erst in Variablen schreiben.
Das Auslesen der Werte und schreiben in Felder habe ich in einem Testarbeitsblatt schon hinbekommen, allerdings sind die Spalten in der Mappe, in der das Script laufen soll, anders benannt und sollen auch nicht verändert werden.
ich bin ebenfalls VBA Neuling und komme mit Google nicht weiter.
Ich habe Dateien mit der Formatierung mit variabler Blockanzahl...
Datum:
06.12.2016
Anfangszeit:
08:51:30
Endzeit
10:41:33
Arbeitszeit (incl. 30 min Pause):
01:50:02
Du hast 06:39:57 zu wenig gearbeitet!
--------------------------------------------
Datum:
06.12.2016
Anfangszeit:
10:42:50
Endzeit
11:09:41
Arbeitszeit (incl. 30 min Pause):
00:26:51
Du hast 06:13:06 zu wenig gearbeitet!
--------------------------------------------
Datum:
06.12.2016
Anfangszeit:
11:10:12
Endzeit
15:33:49
Arbeitszeit (incl. 30 min Pause):
04:23:37
Du hast 01:49:29 zu wenig gearbeitet!
Das Auslesen der Werte und schreiben in Felder habe ich in einem Testarbeitsblatt schon hinbekommen, allerdings sind die Spalten in der Mappe, in der das Script laufen soll, anders benannt und sollen auch nicht verändert werden.