Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1356to1360
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Ordnen von Datensätzen mit oder ohne VBA

Ordnen von Datensätzen mit oder ohne VBA
25.04.2014 13:20:18
Datensätzen
Hallo Leute,
erst mal Danke an Oberschlumpf und Arthur die mir geholfen haben. Und sorry jungs das ich mich hier bedanke und nicht in den eigentlichen Beiträgen:
https://www.herber.de/forum/archiv/1356to1360/t1356146.htm
https://www.herber.de/forum/archiv/1356to1360/t1357722.htm
Aber ich wusste nicht das man nach sieben Tagen einen Forumeintrag nicht mehr kommentieren kann. Und ich hatte letzte Woche auch gar nicht die Möglichkeit.
Das wird mir in Zukunft nicht mehr passieren.
Dann wollte ich noch was zum letzten Beitrag sagen:
https://www.herber.de/forum/archiv/1356to1360/t1357722.htm
Der Code von Arthur funktioniert so wie ich es brauche. Die textdateien werden durchsucht und die datensätze so angeordnet wie ich es brauche:
Dateiname, "der Name", Datum, Uhrzeit
Nicht dass das von Oberschlumpf nicht auch funktioniert aber bei Arthur seinem Code werden die daten wie folgt angeordnet:
Beispiel 1:
Dateiname Word Datum Uhrzeit
10023 Hans 12.12.2013 13:40:22
10023 Hans 14.12.2013 09:34:11
10040 Hans 14.12.2013 09:41:11
10040 Hans 15.12.2013 10:30:11
10040 Hans 15.12.2013 12:05:11 usw...
Ich habe nämlich vergessen zu sagen das in einer Textdatei der name öfter vorkommt mit unterschiedlichem datum und uhrzeit.
Aber jetzt zu meiner Frage und zwar das obige Beispiel also die Datensätze wollte ich mit hilfe einer Pivotabelle so anordnen:
Beispiel 2:
Dateiname Word 1. Datum 1.Uhrzeit 2. Datum 2.Uhrzeit
10023 Hans 12.12.2013 13:40:22 14.12.2013 09:34:11
10040 Hans 14.12.2013 09:41:11 15.12.2013 10:30:11.... usw..
Also wenn in einer Datei mehrere "Hans" einträge vorhanden sind sollen die nicht wie in Beispiel 1 untereinander stehen sondern so wie in beispiel 2. Leider lässt sich das mit einer Pivotabelle nicht so realisieren. Kennt ihr noch andere möglichkeiten?
Bzw. ist es sinnvoll die datensätze nach dem sie erst mal aufgelistet worden sind so anzuordnen oder sollte man das gleich von anfang an so anordnen? Ich habe mir das wohl etwas zu leicht vorgestellt.
Gruß Nico

17
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Ordnen von Datensätzen mit oder ohne VBA
25.04.2014 18:32:10
Datensätzen
Servus, ich hätte noch eine Frage und zwar wollte ich noch eine zweite Bedingung hinzufügen z.B. nach dem das Wort "Fail" gefunden wurde in der Text datei soll es noch nach einem weiteren wort in der textdatei suchen aber nur wenn das erste worte gefunden wurde. und dann soll das ergebnis wie folgt aussehen:
10023 fail 12.12.2013 13:40:22
10023 fail 14.12.2013 09:34:11
10023 pass 14.12.2013 09:41:11
Ich habe es wie folgt versucht leider hat das nicht geklappt:
Sub findWordinTXT()
Dim sWord As String, sPath As String, sSearchPath As String, FileName As String, InputData As  _
String, ssWord As String
Dim AnzFound As Integer
AnzFound = 0
'Wort nach dem gesucht werden soll
sWord = "FAIL "
ssWord = "PASS "
'Suche nach allen Textdateien im Verzeichnis
sSearchPath = "C:\Desktop\Neuer Ordner\Test-Textdateien\*.txt"
sPath = "C:\Desktop\Neuer Ordner\Test-Textdateien\"
FileName = Dir(sSearchPath)
If FileName  "" Then
Do While FileName  ""
Open sPath & FileName For Input As #1
Do While Not EOF(1)
Line Input #1, InputData
If InStr(1, InputData, sWord) > 0 Then
'Zeile mit Suchwort gefunden
AnzFound = AnzFound + 1
Sheets("Recherche").Cells(AnzFound, 1) = FileName
Sheets("Recherche").Cells(AnzFound, 2) = sWord
Line Input #1, InputData
Sheets("Recherche").Cells(AnzFound, 3) = InputData
Line Input #1, InputData
Sheets("Recherche").Cells(AnzFound, 4) = InputData
ElseIf InStr(1, InputData, sWord & ssWord) > 0 Then
AnzFound = AnzFound + 1
Sheets("Recherche").Cells(AnzFound, 1) = FileName
Sheets("Recherche").Cells(AnzFound, 2) = ssWord
Line Input #1, InputData
Sheets("Recherche").Cells(AnzFound, 3) = InputData
Line Input #1, InputData
Sheets("Recherche").Cells(AnzFound, 4) = InputData
End If
Loop
Close #1
'nächste Datei
FileName = Dir
Loop
End If
End Sub
Woran kann das liegen? Kann man die zweite bedingung nicht einfach mit einem "&" verbinden?
Gruß Nico

Anzeige
Ähem, das einzige &, das ich finden kann, ...
25.04.2014 19:52:14
Luc:-?
…befindet sich hierin sPath & FileName, Nico,
aber das ist da wohl berechtigt (evtl fehlt noch \) und auch keine Bedingung. Was du meinst, ist mir aus dem gezeigten Code nicht ersichtlich (den Verlinkungen bin ich vorerst nicht gefolgt), aber schon mal soviel – Bedingungen können mit And, Or, Xor, Eqv bzw Imp verknüpft wdn. Außerdem kann auch noch Not eingesetzt wdn. Das sind alles Logik-Operatoren, während & ein Textverbindungsoperator ist.
Gruß Luc :-?
Besser informiert mit …

Anzeige
AW: Ähem, das einzige &, das ich finden kann, ...
25.04.2014 20:10:20
Nico
Hi Luc,
die operatoren & und And Or usw..... sind mir alle bekannt. Ich habe halt versucht bzw. gedacht das ich wenn ich zwei abfragen machen möchte nur & oder and eingeben muss. also so:
ElseIf InStr(1, InputData, sWord & ssWord) > 0 Then
Ich war der meinung das jetzt nach dem sWord gefragt wird und nach dem ssWord und wenn die beide in der textdatei gefunden werden das excel mir dann das ssWord ausgibt und die nachfolgenden zeilen. aber es geht nicht
gruß nico

Damit verbindest du die beiden Begriffe zu ...
25.04.2014 20:50:26
Luc:-?
…einem lückenlosen Text, Nico,
der so wohl eher nicht in InputData enthalten ist. Du musst schon beide separat abfragen, wenn beide (getrennt) vorhanden sein müssen. Muss nur eines davon vorhanden sein, könntest du die separaten Instr-Ergebnisse vor dem Vgl addieren, anderenfalls musst du sie per And logisch verbinden. Das kann dann auch so aussehen: … CBool(InStr(1, InputData, sWord)) And CBool(InStr(1, InputData, ssWord)) …
Allerdings könnte aber auch das fktionieren …
ElseIf InputData Like "*" & sWord & "*" & ssWord & "*" Then
…falls die beiden Begriffe immer in dieser Reihenfolge auftreten müssen. Anderenfalls sparst du damit nichts!
Luc :-?

Anzeige
AW: Damit verbindest du die beiden Begriffe zu ...
25.04.2014 21:44:58
Nico
Ich möchte ja beide Separat betrachten. Aber nach ssWord soll nur gesucht werden wenn sWord vorher in der Textdatei gefunden wurde.
Gruß Nico

Tja, wie du DANN am elegantesten vorgehst, ...
26.04.2014 00:42:36
Luc:-?
…Nico,
hängt davon ab, ob beide Fälle gleich relevant sind, also in beiden eine (evtl modifizierte) Aktion erfolgen soll. Dabei sind mit „beiden Fällen“ die Fälle nur sWord bzw sWord und in Folge dann auch ssWord gefunden gemeint, also True False (⇒-1:0) und True True (⇒-1:-1).
Soll in beiden Fällen stets genau das Gleiche erfolgen, kann mit CBool(1 + (-Sgn(InStr(1, InputData, sWord)) Imp Sgn(InStr(1, InputData, ssWord)))) gearbeitet wdn, soll in beiden Fällen unterschiedlich bzw modifiziert agiert wdn, ist eine Enumeration zu empfehlen (eine solche entspricht der Festlegung einer Variablen[-Zähl]-Folge und ist stets global in nur einem NormalModul des Projekts - an seinem Anfang und außerhalb jedweder Prozedur - vorzunehmen!), zB:
Enum xlTriState: xlTrue = -1: xlFalse: xlCTrue: End Enum
Die 2.+3. Variable wdn weitergezählt als 0 bzw 1. In der anwendenden Prozedur kann danach eine Variable, zB isSuTxtEnth, As xlTriState deklariert wdn (wird per VBE-Intellisense dann auch angeboten!). In der Folge können dann ihre ZählVariablenNamen anstelle ihres Wertes verwendet wdn. Füllst du also eine solche Variable über die Instr-Formel wie zB so …
isSuTxtEnth = -Sgn(InStr(1, InputData, sWord)) Imp Sgn(InStr(1, InputData, ssWord))
…kannst du diese anschließend nach diesen beiden Fällen abfragen:
    …
Else: isSuTxtEnth = -Sgn(InStr(1, InputData, sWord)) Imp Sgn(InStr(1, InputData, ssWord))
If isSuTxtEnth = xlFalse Then        'nur sWord gefunden
…
ElseIf isSuTxtEnth = xlCTrue Then    'sWord und ssWord gefunden
…
Else                                 'keines gefunden
…
End If
End If
Aber natürlich kannst du das in diesem Fall auch klassisch lösen:
    …
ElseIf CBool(InStr(1, InputData, sWord)) Then
If CBool(InStr(1, InputData, ssWord)) Then
…
Else
…
End If
Else
…
End If
Such dir was Passendes aus!
Morrn, Luc :-?

Anzeige
AW: Tja, wie du DANN am elegantesten vorgehst, ...
26.04.2014 08:58:49
Nico
Morgen Luc, ich habe jetzt mal versucht das umzusetzen und zu verstehen aber anscheinend mache ich was falsch bzw ich checks nicht.
Frage bei der zweiten Variante muss doch erst ein If stehen und dann ein elseif oder?
Ich habe jetzt mal alles eingefügt dann sieht es so aus
If FileName "" Then
Do While FileName ""
Open sPath & FileName For Input As #1
Do While Not EOF(1)
Line Input #1, InputData
ElseIf CBool(InStr(1, InputData, sWord)) Then
If CBool(InStr(1, InputData, ssWord)) Then
'Zeile mit Suchwort gefunden
AnzFound = AnzFound + 1
Sheets("Recherche").Cells(AnzFound, 1) = FileName
Sheets("Recherche").Cells(AnzFound, 2) = sWord
Line Input #1, InputData
Sheets("Recherche").Cells(AnzFound, 3) = InputData
Line Input #1, InputData
Sheets("Recherche").Cells(AnzFound, 4) = InputData
ElseIf CBool(1 + (-Sgn(InStr(1, InputData, sWord)) Imp Sgn(InStr(1, InputData, ssWord)))) Then
AnzFound = AnzFound + 1
Sheets("Recherche").Cells(AnzFound, 1) = FileName
Sheets("Recherche").Cells(AnzFound, 2) = ssWord
Line Input #1, InputData
Sheets("Recherche").Cells(AnzFound, 3) = InputData
Line Input #1, InputData
Sheets("Recherche").Cells(AnzFound, 4) = InputData
End If
Loop
Close #1
'nächste Datei
FileName = Dir
Loop
End If
End Sub
Ich habe beide Varianten ausprobiert aber anscheinend sätze ich sie falsch ein
Gruß Nico

Anzeige
Na, das sollte doch wohl eher so aussehen, ...
26.04.2014 18:40:37
Luc:-?
…Nico:
Option Explicit
Enum xlTriState: xlTrue = -1: xlFalse: xlCTrue: End Enum
Sub sowieso1()
Dim issWordEnth As xlTriState, sWord, ssWord, Filename, InputData, AnzFound
Filename = Dir  '?
If Filename  "" Then
Do While Filename  ""
Open sPath & Filename For Input As #1
Do While Not EOF(1)
Line Input #1, InputData
issWordEnth = -Sgn(InStr(1, InputData, sWord)) Imp _
Sgn(InStr(1, InputData, ssWord))
If issWordEnth > xlTrue Then
'Zeile mit Suchwort1 bzw 1+2 gefunden
AnzFound = AnzFound + 1
Sheets("Recherche").Cells(AnzFound, 1) = Filename
Sheets("Recherche").Cells(AnzFound, 2) = Array(sWord, ssWord)(issWordEnth)
Line Input #1, InputData
Sheets("Recherche").Cells(AnzFound, 3) = InputData
Line Input #1, InputData
Sheets("Recherche").Cells(AnzFound, 4) = InputData
End If
Loop
Close #1
'nächste Datei
Filename = Dir
Loop
End If
End Sub
Sub sowieso2()
Dim sWord, ssWord, Filename, InputData, AnzFound
Filename = Dir  '?
If Filename  "" Then
Do While Filename  ""
Open sPath & Filename For Input As #1
Do While Not EOF(1)
Line Input #1, InputData
If CBool(InStr(1, InputData, sWord)) Then
'Zeile mit Suchwort1 gefunden
AnzFound = AnzFound + 1
Sheets("Recherche").Cells(AnzFound, 1) = Filename
If CBool(InStr(1, InputData, ssWord)) Then
'Zeile mit Suchwort2 gefunden
Sheets("Recherche").Cells(AnzFound, 2) = ssWord
Else: Sheets("Recherche").Cells(AnzFound, 2) = sWord
End If
Line Input #1, InputData
Sheets("Recherche").Cells(AnzFound, 3) = InputData
Line Input #1, InputData
Sheets("Recherche").Cells(AnzFound, 4) = InputData
End If
Loop
Close #1
'nächste Datei
Filename = Dir
Loop
End If
End Sub
Das sind jetzt beide Varianten, wobei dir sowieso1 zeigt, wie man hier eine Enumeration sinnvoll einsetzen kann, da du ja wohl einen kleinen Unterschied zwischen beiden Fällen machst → Inhalt von Sheets("Recherche").Cells(AnzFound, 2).
Für die Funktion der übrigen ProzedurTeile verbürge ich mich nicht, da sie ja wohl auch nicht vollständig ist und ich mich nicht mit Sinn und Zweck des Ganzen beschäftigen wollte.
Das ElseIf stammte übrigens von dir…
Gruß + schöWE, Luc :-?

Anzeige
AW: Na, das sollte doch wohl eher so aussehen, ...
27.04.2014 09:40:26
Nico
Morgen Luc, danke für die mühe. Also das Programm funktioniert leider immer noch nicht es macht noch genau das gleiche wie am anfang. Es kopiert nur die zeilen in ein excel blatt mit dem ersten begriff der zweite wird dennoch ausgelassen. Glaubst du das es vielleicht am ursprünglichen code liegt? du hast ja gesagt das du nicht weißt ob es funktioniert weil du dir den gesamten code bzw was er macht nicht angeschaut hast. der ursprüngliche code durchsucht ja nur einen ordner in dem textdateien drin sind und aus denen soll eine zeile rauskopiert werden wenn der begriff gefunden wurde. das funktioniert auch top aber leider nur mit einem begriff nicht mit mehreren.
das ist der ursprüngliche code:
Sub findWordinTXT()
Dim sWord As String, sPath As String, sSearchPath As String, FileName As String, InputData As  _
String
Dim AnzFound As Integer
AnzFound = 0
'Wort nach dem gesucht werden soll
sWord = "FAIL "
'Suche nach allen Textdateien im Verzeichnis
sSearchPath = "C:\Test-Textdateien\*.txt"
sPath = "C:\Test-Textdateien\"
FileName = Dir(sSearchPath)
If FileName  "" Then
Do While FileName  ""
Open sPath & FileName For Input As #1
Do While Not EOF(1)
Line Input #1, InputData
If InStr(1, InputData, sWord) > 0 Then
'Zeile mit Suchwort gefunden
AnzFound = AnzFound + 1
Sheets("Recherche").Cells(AnzFound, 1) = FileName
Sheets("Recherche").Cells(AnzFound, 2) = sWord
Line Input #1, InputData
Sheets("Recherche").Cells(AnzFound, 3) = InputData
Line Input #1, InputData
Sheets("Recherche").Cells(AnzFound, 4) = InputData
End If
Loop
Close #1
'nächste Datei
FileName = Dir
Loop
End If
End Sub

Gruß Nico

Anzeige
AW: Na, das sollte doch wohl eher so aussehen, ...
27.04.2014 09:48:57
Nico
Moment ich zeige dir mal ein Beispiel von einer Textdatei.
Viele Textdateien haben haben nur den begriff drin
product number 000082317700010123040292
State *** FAIL ***
date 27.08.2013
time 10:23:46
..
..
..
..
product number 000082317700010123040292
State *** FAIL ***
date 27.08.2013
time 12:19:46
Er kann einmal oder öfter vorkommen in der Textdatei. das momentane vba programm kopiert alle einträge aus einer textdatei raus. also wenn einmal oder öfter fail drin steht kopiert es jedes mal fail raus mit dem passenden datum und der uhrzeit. manchmal kann es aber auch vorkommen das am schluss PASS drin steht wie hier.
product number 000082317700010123040292
State *** FAIL ***
date 27.08.2013
time 10:23:46
..
..
product number 000082317700010123040292
State *** PASS ***
date 27.08.2013
time 14:03:46
Dann soll nicht nur der eintrag fail mit den dazugehörigen daten rauskopiert werden sondern auch dann noch pass. es gibt aber auch textdateien wo nur pass drin steht die sollen ignoriert werden. es soll nur pass rauskopiert werden wenn vorher fail drin stand. vielleicht habe ich mich am anfang mein problem etwas schlecht dagestellt.
Gruß Nico

Anzeige
AW: Na, das sollte doch wohl eher so aussehen, ...
29.04.2014 20:02:27
Nico
Luc kannst du mir vll helfen =( bitte oder vll jemand anderes wär echt nett
gruß nico

Ich fürchte ja, die weiteren LineInputs für ...
29.04.2014 21:31:40
Luc:-?
…die Recherche-Spalten 3+4 könnten da evtl kontraproduktiv sein, Nico;
außerdem ist nicht klar, ob die beiden Suchbegriffe auch stets in derselben Line auftreten müssen. Wenn das nämlich nicht der Fall ist, muss sich das Pgm erst mal merken, das der 1. gefunden wurde und dann nur noch nach dem 2. suchen, falls beide maximal nur 1×/Datei auftreten können. Können sie aber mehrfach auftreten, muss die Einlese-Such-Strategie wohl so aussehen, dass in meiner Variante1 isTextEnth solange seinen Wert behält bis entweder der 2.Suchbegriff oder der 1. nochmals gefunden wird. Allerdings bist du im 2.Fall dann schon bei dessen und auch im 1.Fall nicht mehr bei der ursprünglichen Line, so dass unklar ist, welche InputData dann in Spalten 3+4 eingetragen wdn sollen!
Ich denke, dass die ganze Strategie falsch ist. Du müsstest stets die ganze TextDatei in eine Variable lesen, was kein Problem sein dürfte, denn die können 1000e Zeichen aufnehmen, und dann alles nacheinander durchsuchen. Dann kann man solche Abhängigkeiten auch viel besser handhaben.
Gruß Luc :-?

Anzeige
AW: Ich fürchte ja, die weiteren LineInputs für ...
30.04.2014 16:15:28
Nico
Woah Luc das hört sich aber kompliziert an. Also es gibt nur zwei varianten von textdateien die sehen wie folgt aus.
Variante 1 für bei einer Textdatei:
product number 10101
State *** FAIL ***
date 27.08.2013
time 10:23:46
product number 10101
State *** FAIL ***
date 27.08.2013
time 20:23:46
product number 10101
State *** FAIL ***
date 28.08.2013
time 15:23:46
Und dann soll excel die daten aus der einen textdatei so rauskopieren
product number / State / date / time
10101 FAIL "das datum" "die uhrzeit
10101 FAIL "das datum" "die uhrzeit
10101 FAIL "das datum" "die uhrzeit
Es kann in einer datei der Begriff FAIL öfter vorkommen wenn das der fall ist sollten alle einträge von Fail mit der dazu gehörigen zeile "date" und "time" raus kopiert werden. das klappt ja jetzt sogar.
das problem ist nur das jede datei irgendwann mal abgeschlossen ist und dann noch einen zusätzlichen eintrag bekommt mit PASS.
Dann sieht die Variante 2 folgender maßen aus:
product number 10101
State *** FAIL ***
date 27.08.2013
time 10:23:46
product number 10101
State *** FAIL ***
date 27.08.2013
time 20:23:46
product number 10101
State *** PASS ***
date 28.08.2013
time 15:23:46
Und dann soll excel die daten aus der einen textdatei so rauskopieren
product number / State / date / time
10101 FAIL "das datum" "die uhrzeit
10101 FAIL "das datum" "die uhrzeit
10101 PASS "das datum" "die uhrzeit
Momentan geht er ja her und kopiert aus jeder textdatei immer den Fail eintrag raus mit den dazu gehörigen daten. jetzt soll es halt noch ergänzt werden das wenn pass drin steht auch noch der pass eintrag mit den dazugehörigen zeilen raus kopiert. er soll aber nur pass kopieren wenn er vorher fail aus der gleichen textdatei kopiert hat. der begriff fail und pass stehen nie in einer zeile es ist so wie oben immer blockweise in der textdatei drin. wie löst man denn das am einfachsten? ich hatte zwar etwas c in der schule und ich kenn mich so mit excel an sich aus aber ich schaff es nicht die daten aus den dateien zu bekommen. ich muss nämlich mit den daten noch einiges machen was ich natürlich kann bis auf sie das ich sie von der textdatei nicht in excel bekomme. es wär echt stark wenn du mir helfen könntest
Gruß Nico

Na, wenn PASS nur max 1x gg EOF vorkommen ...
01.05.2014 00:52:57
Luc:-?
…wird, Nico,
kann die Organisation ja im Prinzip so bleiben, nur musst du im False-Fall von FAIL (nur dann!) in derselben Line noch nach PASS suchen. Das solltest du doch auf Basis meiner Bspp hinbekommen…!
Gruß Luc :-?

AW: Na, wenn PASS nur max 1x gg EOF vorkommen ...
02.05.2014 07:45:04
Nico
Guten Morgen Luc bzw. morgen allen. Also ich habs gestern mal probiert. aber er gibt mir von den paar textdateien die ich nur zum test durchsuchen lasse nur 7 mal fail aus das passt aber pass will er nicht raus rücken. dann habe ich es verändert dann hat er mir 7 mal pass anstatt 7 mail und einmal pass auszugeben =D. das stimmt was nicht mit meiner anordnung oder ich finde den wurm nicht. gruß nico

AW: Na, wenn PASS nur max 1x gg EOF vorkommen ...
04.05.2014 21:52:18
Nico
Abend Luc, du an was könnte es denn liegen das bei mir nur fail oder nur pass raus kommt und nicht so wie ich es eigentlich bräuchte? =(

AW: Na, wenn PASS nur max 1x gg EOF vorkommen ...
08.05.2014 11:02:20
Nico
Hallo Luc, ich habe eine frage zu deinem Code.
issWordEnth = -Sgn(InStr(1, InputData, sWord)) Imp Sgn(InStr(1, InputData, ssWord))
Was sagt diese Zeile aus? issWordEnth ist ein Merker für das Ergebnis nach dem = oder?
Sgn ist eine Funktion die 1, 0 oder -1 zurück gibt wenn die bedingung erfüllt ist oder?
Imp ist ein Operator der bitweise vergleicht.
Aber was bedeutet das genau? ich frage damit ich das verstehe.
Dann noch eine frage und zwar habe ich jetzt die Variante 1 von dir genommen und so wie du gesagt hast nach dem zweiten wort "pass" gesucht wenn das erste "fail" nicht mehr kommt aber er bringt mir immer eine fehlermeldung. Ich kann es leider nicht umsetzen.
Option Explicit
Enum xlTriState: xlTrue = -1: xlFalse: xlCTrue: End Enum
Sub findWordinTXT()
Dim issWordEnth As xlTriState, sWord, ssWord, Filename, InputData, AnzFound, sPath,  _
sSearchPath
AnzFound = 0
'Wörtern nach denen gesucht werden soll
sWord = "FAIL "
ssWord = "PASS "
'Suche nach allen Textdateien im Verzeichnis
sSearchPath = "C:\Desktop\Test-Textdateien\*.txt"
sPath = "C:\Desktop\Test-Textdateien\"
Filename = Dir(sSearchPath)
If Filename  "" Then
Do While Filename  ""
Open sPath & Filename For Input As #1
Do While Not EOF(1)
Line Input #1, InputData
issWordEnth = -Sgn(InStr(1, InputData, sWord)) Imp _
Sgn(InStr(1, InputData, ssWord))
If issWordEnth > xlTrue Then
'Zeile mit Suchwort1 bzw 1+2 gefunden
AnzFound = AnzFound + 1
Sheets("Recherche").Cells(AnzFound, 1) = Filename
Sheets("Recherche").Cells(AnzFound, 2) = Array(sWord, ssWord)(issWordEnth)
Hier sollte doch die suche nach dem zweiten wort beginnen oder?
InStr(1, InputData, ssWord) > 0 Then
Sheets("Recherche").Cells(AnzFound, 2) = ssWord
Line Input #1, InputData
Sheets("Recherche").Cells(AnzFound, 3) = InputData
Line Input #1, InputData
Sheets("Recherche").Cells(AnzFound, 4) = InputData
End If
Loop
Close #1
'nächste Datei
Filename = Dir
Loop
End If
End Sub
Gruß Nico

303 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige