Live-Forum - Die aktuellen Beiträge
Datum
Titel
17.10.2025 10:28:49
16.10.2025 17:40:39
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Bestimmte Wörter in .txt-Datei suchen und folgende Zeichenkette ausgeben

Bestimmte Wörter in .txt-Datei suchen und folgende Zeichenkette ausgeben
14.11.2019 11:29:01
Erdnusskrieger
Hallo Excel-Spezis,
ich habe folgendes Problem und hoffe auf eure Unterstützung!
Ich suche zusätzlich zu meinem bisherigen Code noch drei einzelne Wörter aus einem .txt-Dokument. Ich hab das Gefühl, dass ich den schweren Part bereits mit dem Forum hier gelöst habe, den leichten aber nicht programmiert bekomme. Und zwar brauche ich die Zeichenkette die hinter den Begriffen FGNR, Bau und Stelle steht.
Beispiele:
Zu Bau:
Bau_____:_A1CD (Unterstriche sind Leerzeichen!) (So schaut die Zeile in der .txt-datei aus)
Hier brauch ich quasi das A1CD (ist nur ein Beispiel, es ist möglich, dass die Zeichenkette in der Länge variabel ist, sprich es können auch nur 3 Zeichen oder sogar 5 sein). Bau kommt öfters in der Datei vor. Ich brauche aber nur die Zeichenkette (in dem Fall A1CD) wo es zum ersten mal im .txt-Dokument auftritt. Diese soll in die Sheets "Prüf" und "Bew" in die Zelle "I1" geschrieben werden.
Zu FGNR:
XX__ABCD_______blub_______FGNR_____________:_3O92J37 (Unterstriche sind Leerzeichen) (So schaut die Zeile in der .txt-datei aus)
Hier brauch ich quasi das 3O92J37(ist nur ein Beispiel, die Zeichenkette ist aber immer 7-stellig). FGNR kommt öfters in der Datei vor. Ich brauche aber nur die Zeichenkette (in diesem Fall 3O92J37) wo es zum ersten mal auftritt. Diese soll in die Sheets "Prüf" und "Bew" in die Zelle "I2" geschrieben werden.
Zu Stelle:
XX__ABCD_______Blub_______Stelle_____________:_A22A-22-22-222 (Unterstriche sind Leerzeichen)(So schaut die Zeile in der .txt-datei aus)
Hier brauch ich quasi das A22A-22-22-222 in diesem Fall(ist nur ein Beispiel, die Zeichenkette kann unterschiedlich lang sein). Stelle kommt nur einmal in der Datei vor. Diese soll in die Sheets "Prüf" und "Bew" in die Zelle "I3" geschrieben werden.
Ich habe bereits schon vieles probiert,jedoch komme ich nicht zum gewünschten Ergebnis. Dachte wenn ich quasi die Schleife einfach wiederhole, nur mit den neuen Variablen, sollte es funktionieren... hab ich falsch gedacht :) Dr. Google hab ich auch durchforstet, leider ohne Erfolg.. Könntest ihr mir hierbei noch behilflich sein?
So wie der bisherige Code ausschaut, soll er auch bleiben, denn ich habe bereits eine Suchabfrage nach SA's gestartet um andere Informationen die hintenanstehen zu finden. Mit Erfolg :)
Ich hoffe ich konnte mich verständlich ausdrücken.
Code sieht bisher folgendermaßen aus:

Sub Check_In_einlesen()
'Variablen definieren
Dim Quelldatei As String     'Speicherort der Textdatei
Dim Inhalt As String             'Inhalt der Textdatei
Dim Zeile As Integer            'Laufvariable
Dim sWord1 As String         'Wort nach dem gesucht werden soll
Dim sWord2 As String         'Wort nach dem gesucht werden soll
Dim sWord3 As String         'Wort nach dem gesucht werden soll
Dim sWord4 As String         'Wort nach dem gesucht werden soll
Dim AnzFound As Integer
Dim lngStelle1 As Long       'Stelle, an der das sWord1 gefunden wurde
Dim arSAs                            'Array für die SAs einer Zelle
AnzFound = 0
'Wörter nach denen gesucht werden soll
sWord1 = "SA's"
sWord2 = "FGNR"
sWord3 = "Bau"
sWord4 = "Stelle"
'Quelldatei ansprechen
Quelldatei = Application.GetOpenFilename("Textdateien (*.txt), *.txt")
'Tabellenblatt aktivieren
ThisWorkbook.Worksheets("SA-Konfiguration").Activate
'Quelldatei öffnen
Open Quelldatei For Input As #1
'SA-Codes in SA-Konfiguration eintragen
Do While Not EOF(1)           'Schleife bis Datenende
'Inhalt der Quelldatei zeilenweise einlesen
Line Input #1, Inhalt
lngStelle1 = InStr(1, Inhalt, sWord1)
If lngStelle1 > 0 Then
'Zeile mit Suchwort gefunden
AnzFound = AnzFound + 1
Sheets("SA-Konfiguration").Cells(AnzFound, 3) = Mid(Inhalt, 46) 'Nur die SA-Codes  _
ausgeben
arSAs = Split(Mid(Inhalt, lngStelle1 + 19), " ")
Sheets("SA-Konfiguration").Cells(AnzFound, 3).Resize(, UBound(arSAs) + 1) = arSAs    '  _
_
Nur die SA-Codes
End If
Loop
'Quelldatei schließen
Close #1
End Sub

Anzeige

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Link zum vorherigen Thread
14.11.2019 11:33:28
NoNet
Hallo Erdnusskrieger,
für Folgethreads ist es sinnvoll, den Link zum vorherigen Thread anzugeben :
https://www.herber.de/forum/messages/1722868.html
Ich hatte noch keine Gelegenheit und Muße, mich mit der Folgefrage zu beschäftigen - evtl. hat hier ein anderer Excel-Freund mehr Zeit !?!
Salut, NoNet

Hast Du Interesse, andere Excel-Begeisterte kennenzulernen ? - Dann komme zum

Exceltreffen 12.-14.06.2020 in Freiberg/Sachsen

http://www.exceltreffen.de/index.php?page=291


Anmeldungen sind noch bis 31.03.2020 möglich ! - Schau doch mal rein !

Anzeige
AW: Vorüberlegungen
14.11.2019 11:55:02
Fennek
Hallo,
bevor man sich für eine bestimmte Methode entscheidet, sollten die Rahmenbedingungen geklärt werden:
- wie groß ist/sind die Textdatei/en (zeilenweise zu lesen ist nur bei eher kleinen Dateien sinnvoll)
- wie oft kommen die Suchbegriffe vor (in fast jeder Zeile, sehr selten
- wie häufig wird der Code benötigt
Es gibt im CMD die Befehle "FIND" und "FINDSTR", die Textdateien sehr effizient durchsuchen können.
Textdateien können auch komplet auf einmal in den RAM eingelesen werden, Analysen werden dann viel schneller.
mfg
Anzeige
AW: Vorüberlegungen
14.11.2019 12:15:12
Erdnusskrieger
Hallo Fennek,
- .txt-Dateien haben schätzungsweise eine max. Größe von 2mb (max.20000 Zeilen)
- Bau kommt häufig vor (100-200x?), ich brauche aber nur die Zeichenkette hinterm 1. Bau. FGNR kommt weniger als 10x vor, ich brauche aber nur die Zeichenkette hinterm 1. FGNR. Stelle kommt 1x vor und ich brauche nur die Zeichenkette dahinter.
- Der Code wird häufig verwendet. Hintergrund ist der, dass ich viele .txt-dateien einlesen muss über zukünftig mehrere Monate/Jahre und mit den oben benötigten Informationen eine Excel befüllen muss. Deswegen möchte ich dies möglichst automatisiert über ein Klick auf ein Button (das Makro einer Schaltfläche zuweisen kriege ich mittlerweile hin ;)) realisieren. Dies würde mir eine Menge Zeit ersparen.
Viele Grüße
Anzeige
AW: CMD
14.11.2019 12:30:06
Fennek
Hallo,
unter diesen Umstände dürfte ein Ansatz im CMD besser sein.
Versuche Win-Taste+r: cmd
und dann: Find "FGNR" Dateiname
Dies kann im 2. Schritt gut automatisiert werden und vollständig aus VBA gesteuert werden.
Günstig wäre auch eine kleines Beispiel der Text-Datei (alle Beispiele kommen 2x vor, einige "Nieten") hochzuladen.
mfg
Anzeige
AW: CMD
14.11.2019 12:44:16
Erdnusskrieger
Das Programm soll schon über Excel ablaufen. Ist eine Vorgabe die ich bekommen habe.
Zumal das Programm hier noch nicht abgeschlossen ist.
In meinem bisherigen Code habe ich nämlich bereits mir sogenannte SA's (viele Zahlen-Buchstabenkombinationen) ausgelesen. Diese SA's werden weitere Zeilen zugeordnet, die ich letztendlich brauche.
Heißt, per Klick auf den 1. Button sollen mir meine Rahmendaten (Bau, Stelle, FGNR und SA's) aus einem .txt-Dokument ausgegeben werden und per Klick auf den 2. Button sollen mir die Zeilen auf Basis der Rahmendaten aus einem weiteren Excel-Sheet ausgegeben werden.
Das hat schon alles seine Gründe, weswegen ich dies alles mit Excel (VBA) machen muss.
Eine Text-Datei darf ich leider nicht hochladen (auch kein Ausschnitt hiervon), deswegen versuche ich es so schon bestmöglichst zu umschreiben, wie die Zeilen ausschauen.
Kannst du mir hierbei helfen?
Grüße
Anzeige
AW: eigenes Beispiel
14.11.2019 13:01:24
Fennek
Hallo,
aus deinem Beitrag habe ich die Beispiele in eine Txt-Datei kopiert. Dann geht dieser Code:

$Tx = get-content C:\Users\User\Desktop\Erdnuss.txt
$Tx | Select-String -Pattern 'Bau|FGNR|Stelle' -AllMatches > $null
foreach ($T in $Tx) {
if ($T.Contains('Bau')) {$it = 'Bau'}
if ($T.Contains('FGNR')) {$it = 'FGNR'}
if ($T.Contains('Stelle')) {$it = 'Stelle'}
$S = $T -split(':')
write-host ($it, $S[1])
}
VBA kann mit "CreateObject" alle COM-Programme starten, also sowohl CMD als auch Powershell. Außer einem kurzen Flackern des Bildschirms muss der User nichts davon mitbekommen. Die Werte werden dann in Excel importiert, in Zellen geschrieben uvm.
mfg
(Powershell-Code)
Anzeige
AW: Bestimmte Wörter in .txt-Datei suchen und folgende Zeichenkette ausgeben
16.11.2019 19:54:53
Piet
Hallo Erdnusskrieger
ich sehe gerade diesen Thread, darauf gab ich im anderen Thread bereits diese Antwort mit Lösung.
Würde mich freuen wenn es dir hilft dein VBA Problem dami zu lçsen.
hier der fehlende Code um die drei Texte "Bau", "Stelle" und "FGNR" auszuwerten. Wohin das Ergebnis der Variablen "Txt" dann geschrieben werden muss bitte selbst ergzenzen. Dim musst du noch um Txt as String und c as İnteger erweitern. Viel Spass beim testen ...
mfg Piet
Sub test()
Inhalt = Range("D1")
If InStr(Inhalt, "Bau ") Then
c = InStr(Inhalt, "Bau ")
Txt = Trim(Mid(Inhalt, InStr(c, Inhalt, ":") + 1, 100))
Txt = Trim(Left(Txt, InStr(Txt, " ")))
'Wohin laden?  Bitte selbst ergaenzen
End If
If InStr(Inhalt, "Stelle ") Then
c = InStr(Inhalt, "Stelle ")
Txt = Trim(Mid(Inhalt, InStr(c, Inhalt, ":") + 1, 100))
Txt = Trim(Left(Txt, InStr(Txt, " ")))
End If
If InStr(Inhalt, "FGNR") Then
c = InStr(Inhalt, "FGNR")
Txt = Trim(Mid(Inhalt, InStr(c, Inhalt, ":") + 1, 100))
Txt = Trim(Left(Txt, InStr(Txt, " ")))
End If
End Sub

Anzeige
AW: Bestimmte Wörter in .txt-Datei suchen und folgende Zeichenkette ausgeben
19.11.2019 11:35:09
Erdnusskrieger
Hallo Piet,
danke für deine Nachricht!
Leider hat dein Code bei mir nicht funktioniert, das Programm läuft durch, aber er schreibt die Daten nicht in die vorhergesehenen Zellen. Ich würde dir einfach mal den Quellcode hochladen wie er bisher ausschaut.
Eventuell findest du ja den Fehler.

Sub Check_In_einlesen()
'Variablen definieren
Dim Quelldatei As String        'Speicherort der Textdatei
Dim Inhalt As String            'Inhalt der Textdatei
'Dim Inhalt2 As String           'Inhalt der Textdatei
'Dim Inhalt3 As String           'Inhalt der Textdatei
'Dim Inhalt4 As String           'Inhalt der Textdatei
Dim sWord1 As String            'Wort nach dem gesucht werden soll
'Dim sWord2 As String            'Wort nach dem gesucht werden soll
'Dim sWord3 As String            'Wort nach dem gesucht werden soll
'Dim sWord4 As String            'Wort nach dem gesucht werden soll
Dim AnzFound As Integer
Dim lngStelle1 As Long          'Stelle, an der das sWord1 gefunden wurde
'Dim lngStelle2 As Long          'Stelle, an der das sWord1 gefunden wurde
'Dim lngStelle3 As Long          'Stelle, an der das sWord1 gefunden wurde
'Dim lngStelle4 As Long          'Stelle, an der das sWord1 gefunden wurde
Dim arSAs                       'Array für die SAs einer Zelle
Dim c As Integer
Dim Txt As String
AnzFound = 0
'Wörter nach denen gesucht werden soll
sWord1 = "SA's"
'sWord2 = "FGNR"
'sWord3 = "Bau"
'sWord4 = "Stelle"
'Quelldatei ansprechen
Quelldatei = Application.GetOpenFilename("Textdatei (*.txt), *.txt")
'Tabellenblatt aktivieren
ThisWorkbook.Worksheets("SA-Konfiguration").Activate
'Quelldatei öffnen
Open Quelldatei For Input As #1
'____________________________________________________________________________________________________________________
'SA-Codes in SA-Konfiguration eintragen
Do While Not EOF(1)           'Schleife bis Datenende
'Inhalt der Quelldatei zeilenweise einlesen
Line Input #1, Inhalt
lngStelle1 = InStr(1, Inhalt, sWord1)
If lngStelle1 > 0 Then
'Zeile mit Suchwort gefunden
AnzFound = AnzFound + 1
Sheets("SA-Konfiguration").Cells(AnzFound, 3) = Mid(Inhalt, 46) 'Nur die SA-Codes  _
ausgeben
arSAs = Split(Mid(Inhalt, lngStelle1 + 19), " ")
Sheets("SA-Konfiguration").Cells(AnzFound, 3).Resize(, UBound(arSAs) + 1) = arSAs    ' _
Nur die SA-Codes
End If
Loop
'Quelldatei schließen
Close #1
'______________________________________________________________________________________________________________________
'Quelldatei öffnen
Open Quelldatei For Input As #1
If InStr(Inhalt, "FGNR") Then
c = InStr(Inhalt, "FGNR")
Txt = Trim(Mid(Inhalt, InStr(c, Inhalt, ":") + 1, 100))
Txt = Trim(Left(Txt, InStr(Txt, " ")))
Sheets("Prüfanleitung").Range("I2").Value = Txt   'FGNR ausgeben in Prüfanleitung
Sheets("Bewertungsbogen").Range("I2").Value = Txt 'FGNR ausgeben in Bewertungsbogen
End If
'Quelldatei schließen
Close #1
'_______________________________________________________________________________________________________________________
'Quelldatei öffnen
Open Quelldatei For Input As #1
If InStr(Inhalt, "Bau ") Then
c = InStr(Inhalt, "Bau ")
Txt = Trim(Mid(Inhalt, InStr(c, Inhalt, ":") + 1, 100))
Txt = Trim(Left(Txt, InStr(Txt, " ")))
Sheets("Prüfanleitung").Range("I1").Value = Txt   'Bau ausgeben in Prüfanleitung
Sheets("Bewertungsbogen").Range("I1").Value = Txt 'Bau ausgeben in Bewertungsbogen
End If
'Quelldatei schließen
Close #1
'_______________________________________________________________________________________________________________________
'Quelldatei öffnen
Open Quelldatei For Input As #1
If InStr(Inhalt, "Stelle") Then
c = InStr(Inhalt, "Stelle")
Txt = Trim(Mid(Inhalt, InStr(c, Inhalt, ":") + 1, 100))
Txt = Trim(Left(Txt, InStr(Txt, " ")))
Sheets("Prüfanleitung").Range("I3").Value = Txt   'Stelle ausgeben in Prüfanleitung
Sheets("Bewertungsbogen").Range("I3").Value = Txt 'Stelle ausgeben in Bewertungsbogen
End If
'Quelldatei schließen
Close #1
'In Bewertungsbogen bleiben
Worksheets("Bewertungsbogen").Activate
End Sub

Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Bestimmte Wörter in .txt-Datei suchen und ausgeben


Schritt-für-Schritt-Anleitung

  1. VBA-Umgebung öffnen: Öffne Excel und drücke ALT + F11, um den VBA-Editor zu starten.

  2. Neues Modul erstellen: Klicke mit der rechten Maustaste auf "VBAProject (DeinDateiname)" und wähle "Einfügen" > "Modul".

  3. Code einfügen: Kopiere den folgenden VBA-Code und füge ihn in das Modul ein:

    Sub Check_In_einlesen()
       Dim Quelldatei As String
       Dim Inhalt As String
       Dim AnzFound As Integer
       Dim c As Integer
       Dim Txt As String
    
       ' Wörter nach denen gesucht werden soll
       Dim sWord1 As String, sWord2 As String, sWord3 As String
       sWord1 = "FGNR"
       sWord2 = "Bau"
       sWord3 = "Stelle"
    
       ' Quelldatei ansprechen
       Quelldatei = Application.GetOpenFilename("Textdateien (*.txt), *.txt")
       Open Quelldatei For Input As #1
    
       ' Schleife bis zum Ende der Datei
       Do While Not EOF(1)
           Line Input #1, Inhalt
    
           If InStr(Inhalt, sWord1) > 0 Then
               c = InStr(Inhalt, sWord1)
               Txt = Trim(Mid(Inhalt, InStr(c, Inhalt, ":") + 1, 100))
               Sheets("Prüfanleitung").Range("I2").Value = Txt
               Sheets("Bewertungsbogen").Range("I2").Value = Txt
           End If
    
           If InStr(Inhalt, sWord2) > 0 Then
               c = InStr(Inhalt, sWord2)
               Txt = Trim(Mid(Inhalt, InStr(c, Inhalt, ":") + 1, 100))
               Sheets("Prüfanleitung").Range("I1").Value = Txt
               Sheets("Bewertungsbogen").Range("I1").Value = Txt
           End If
    
           If InStr(Inhalt, sWord3) > 0 Then
               c = InStr(Inhalt, sWord3)
               Txt = Trim(Mid(Inhalt, InStr(c, Inhalt, ":") + 1, 100))
               Sheets("Prüfanleitung").Range("I3").Value = Txt
               Sheets("Bewertungsbogen").Range("I3").Value = Txt
           End If
       Loop
    
       Close #1
    End Sub
  4. Makro ausführen: Schließe den VBA-Editor und kehre zu Excel zurück. Drücke ALT + F8, wähle Check_In_einlesen aus und klicke auf "Ausführen".


Häufige Fehler und Lösungen

  • Problem: Daten werden nicht in die Zellen geschrieben.
    Lösung: Überprüfe die Namen der Arbeitsblätter ("Prüfanleitung" und "Bewertungsbogen") auf Schreibfehler.

  • Problem: Datei wird nicht gefunden.
    Lösung: Stelle sicher, dass du eine .txt-Datei auswählst, die in dem richtigen Format gespeichert ist.


Alternative Methoden

Eine Alternative zu VBA wäre die Verwendung von PowerShell, um den Text zeilenweise einzulesen und die gewünschten Informationen zu extrahieren. Hier ein Beispiel:

$Tx = Get-Content "C:\Users\User\Desktop\Erdnuss.txt"
$Tx | Select-String -Pattern 'Bau|FGNR|Stelle' -AllMatches | ForEach-Object {
    $S = $_ -split ':'
    Write-Host ($S[0], $S[1])
}

Mit PowerShell kannst du die Textdatei durchsuchen und die Ergebnisse direkt in der Konsole ausgeben.


Praktische Beispiele

Ein Beispiel für eine .txt-Datei könnte so aussehen:

XX__ABCD_______blub_______FGNR_____________:_3O92J37
Bau_____:_A1CD
XX__ABCD_______Blub_______Stelle_____________:_A22A-22-22-222

Wenn du den obigen VBA-Code ausführst, werden die Werte für FGNR, Bau und Stelle in die angegebenen Zellen geschrieben.


Tipps für Profis

  • Verwende die Split-Funktion, um Informationen aus einer Textzeile effektiver zu extrahieren.
  • Denke daran, die Fehlerbehandlung in deinen Code einzufügen, um unerwartete Probleme zu vermeiden.
  • Wenn du oft mit großen Textdateien arbeitest, erwäge, die Datei zeilenweise in ein Array einzulesen, um die Verarbeitung zu optimieren.

FAQ: Häufige Fragen

1. Wie suche ich nach Wörtern in Dateien?
Du kannst die InStr-Funktion verwenden, um nach bestimmten Wörtern in einer Zeile zu suchen.

2. Wie lese ich eine .txt-Datei zeilenweise in ein Array ein?
Verwende die Get-Content-Funktion in PowerShell, um die Datei zeilenweise einzulesen.

3. Kann ich PHP verwenden, um eine Datei zeilenweise einzulesen?
Ja, mit PHP kannst du eine Datei zeilenweise einlesen, indem du fgets() oder file() verwendest.

4. Wie gebe ich Text aus einer PowerShell-Skripting-Umgebung aus?
Verwende Write-Host, um Daten in der PowerShell-Konsole auszugeben.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige