Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Mehrere Wörter suchen
#1
Hallo zusammen!

Ich habe ein VBA-Programm geschrieben, um in Spalte A nach dem Wort "Hallo" in einer Tabelle zu suchen. Sobald das Wort in der Spalte gefunden wird, überträgt das Programm die Zeile in der Spalte nach rechts in eine neue Tabelle. Das funktioniert gut. Jetzt möchte ich nach mehreren Wörtern gleichzeitig suchen. Leider funktioniert das nicht ... Kann sich jemand den VBA-Code ansehen und mir sagen, was ich falsch gemacht habe? Vielen Dank im Voraus!


Der Code

Sub test()
T = "T1"
X = "A"
AX = 1

Z = "T4"
Y = 2
AY = "B"

Do Until Suche <> ""
Suche = ("hallo")

Loop
Set A = Worksheets(T)
Set B = Worksheets(Z)
Y = Y

With A.Columns(X)
Set Gefunden = .Find(Suche, LookIn:=xlValues)
If Not Gefunden Is Nothing Then
Erste = Gefunden.Address
Do 'für alle Fundstellen
B.Cells(Y, AY).Resize(1, AX) = Gefunden.Offset(0, 1).Resize(1, AX).Value
Y = Y + 1
Set Gefunden = .FindNext(Gefunden)
Loop Until Gefunden.Address = Erste
End If
End With
End Sub
Antwortento top
#2
Hallo,

bist du sicher, dass es da eine funktionierende Version gibt? Die unter deinem Betrag angezeigte markiert bei mir zwei Zeilen als fehlerhaft.
Viele Grüße
Klaus-Dieter
Der Erfolg hat viele Väter, 
der Misserfolg ist ein Waisenkind
Richard Cobden
[-] Folgende(r) 1 Benutzer sagt Danke an Klaus-Dieter für diesen Beitrag:
  • fh_swf
Antwortento top
#3
Pardon, hatte leider die falsche Version eingefügt. Mein Fehler! Ist korrigiertSmile
Antwortento top
#4
Hallo,

Du kannst bei Find nur einen Suchbegriff verwenden. Es gibt uA folgende Möglichkeiten:

1) Rufe die Suchfunktion mehrmals hintereinander mit den jeweiligen Begriffen auf
2) Kopiere die Daten in eine Array-Variable und gehe diese Zeile für Zeile durch und vergleiche den Inhalt mit den Suchbegriffen.
Gruß
Michael
Antwortento top
#5
Vielen Dank für deinen Kommentar. Das Problem ist, dass ich nach c.a 160 Wörtern suchen muss und die jeweiligen Spalten rechts daneben ausgeben soll. Natürlich lässt sich das durch eine mehrfache Wiederholung des Programms realisieren, jedoch ist es wünschenswert es so automatisiert wie möglich zu machen. Lässt sich die Array-Variable mit dem VBA Code verbinden?
Antwortento top
#6
Na ja, Dein Code-Schnipsel ist ja nicht sehr groß. Da kann man nicht viel davon verwenden. Für einen sinnvollen Lösungsvorschlag wären mehr Infos notwendig. Wie sieht die Tabelle aus? Welcher Bereich soll davon durchsucht werden? Wo stehen die (160) Suchbegriffe?

Eine Beispieldatei wäre hilfreich!
Gruß
Michael
Antwortento top
#7
Hallöchen,

im Prinzip so.
Deine Suchworte stehen z.B. in Tabelle2, Spalte A - sonst steht da nix. Das Makro reagiert flexibel auf die Anzahl der Einträge dort. Es sollten nur keine Leerzellen zwischendrin sein.
Deinen Suchcode musst Du dann in der Schleife einfügen, ich habe dort mal ein paar Zeilen drin, etwas abgewandelt.
Wenn Du einen treffer hast könntest Du die Schleife dann auch mit Exit For verlassen, damit Du nicht mehrere Kopien bei mehreren Treffern in einer Zeile erhältst.

Code:
Option Explicit

Sub test()
'Variablendeklarationen
'Variant
Dim arrSuch, gefunden
'Integer
Dim iCnt%
'Array einlesen
'Mit dem Blatt TABELLE2
With Sheets("Tabelle2")
  'Daten in Array uebertragen
  arrSuch = .Range("A1:A" & .Cells(.Rows.Count, 1).End(xlUp).Row).Value
'Ende Mit dem Blatt TABELLE2
End With
'Schleife ueber alle Arrayeintraege
For iCnt = 1 To UBound(arrSuch)
  'Dein Code
  With Columns(1)
    Set gefunden = .Find(arrSuch(iCnt, 1), LookIn:=xlValues)
    If Not gefunden Is Nothing Then
    '...
    End If
  End With
'Ende Schleife ueber alle Arrayeintraege
Next
End Sub
   \\\|///      Hoffe, geholfen zu haben.
   ( ô ô )      Grüße, André aus G in T  
 ooO-(_)-Ooo    (Excel 97-2016)
Antwortento top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste