VBA: Find Methode: Finde Wert nach Zeile XY

Hallo,

ich stecke mal wieder bei einem VBA Macro fest und mich packt gleich die Wut weil ich keinen Schimmer hab wie es geht bzw. wo der Fehler liegt.
Hier das Problem:
Ich suche eine Zelle die den Wert XY hat. Diese Zelle wird dann als Range gesettet.
So:

Dim recentGB as Range, gbCell as Range

Set recentGB = Sheets(1).Cells.Find(What:=„XY“, after:= Cells(1, 1), LookIn:=xlFormulas, lookat:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False)

Sagen wir mal den Wert findet er in Zelle B12.

Danach will ich wieder einen Wert Z suchen, aber erst ab der zuvor gesetteten Zelle. Das versuche ich so:

Set gbCell = Sheets(1).Cells.Find(What:=„Z“, after:= recentGB, LookIn:=xlValues, lookat:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False)

Trotzdem nimmt er dann aber eine Zelle die den Wert Z enthält, die vor der XY-Zelle liegt, z.B. A1 obwohl er ja erst Treffer nach B12 ausspucken soll.

Was mache ich falsch? Nutze ich den after-Parameter nicht korrekt? Wie nutze ich ihn richtig.

Zur Info: Wert XY liegt in Spalte 2, Wert Z in Spalte 1.

Danke für eure Hilfe!

MfG Janadi

Set gbCell = Sheets(1).Cells.Find(What:=„Z“, after:= recentGB,
LookIn:=xlValues, lookat:=xlWhole, SearchOrder:=xlByRows,
SearchDirection:=xlNext, MatchCase:=False,
SearchFormat:=False)

Trotzdem nimmt er dann aber eine Zelle die den Wert Z enthält,
die vor der XY-Zelle liegt, z.B. A1 obwohl er ja erst Treffer
nach B12 ausspucken soll.
Zur Info: Wert XY liegt in Spalte 2, Wert Z in Spalte 1.

Hallo Janadi,

folgender Code läuft bei mir korrekt. Testtabelle:

A1: Z
A3: Z
A7: Z
B4: XY

Es wird erst B4 angezeigt, dann A7.
Den benannten Parameter „Searchformat“ mußte ich entfernen, da XL2000 den nicht kennt.

Sub such()
Dim recentGB As Range, gbCell As Range
Set recentGB = Sheets(1).Cells.Find(What:="XY", after:=Cells(1, 1), LookIn:=xlFormulas, lookat:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False)
MsgBox recentGB.Address
Set gbCell = Sheets(1).Cells.Find(What:="Z", after:=recentGB, LookIn:=xlValues, lookat:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False)
MsgBox gbCell.Address
End Sub

Gruß
Reinhard

Hallo Janadi,

folgender Code läuft bei mir korrekt. Testtabelle:

A1: Z
A3: Z
A7: Z
B4: XY

Es wird erst B4 angezeigt, dann A7.
Den benannten Parameter „Searchformat“ mußte ich entfernen, da
XL2000 den nicht kennt.

Sub such()
Dim recentGB As Range, gbCell As Range
Set recentGB = Sheets(1).Cells.Find(What:=„XY“,
after:=Cells(1, 1), LookIn:=xlFormulas, lookat:=xlPart,
SearchOrder:=xlByRows, SearchDirection:=xlNext,
MatchCase:=False)
MsgBox recentGB.Address
Set gbCell = Sheets(1).Cells.Find(What:=„Z“, after:=recentGB,
LookIn:=xlValues, lookat:=xlWhole, SearchOrder:=xlByRows,
SearchDirection:=xlNext, MatchCase:=False)
MsgBox gbCell.Address
End Sub

Gruß
Reinhard

Jo, Danke Reinhard. Das funktioniert. Ich hab in der Zwischenzeit aber auch noch eine andere Lösung gefunden die noch eine andere Restriktion von meiner Seite her berücksichtigt.

Set recentGB = Sheets(1).Range(„B:B“).Find(What:=„XY“)

Set holdGB = Sheets(1).Range(„B:B“).Find(What:=„AB“)

Set gbCell = Sheets(1).Range(Cells(recentGB.Row, 1), Cells(holdGB.row, 1)).Find(What:=„Z“)

So durchsucht er immer nur den Bereich der zwischen recentGB und holdGB liegt. Letztendlich ist das genau das wonach ich gesucht habe und vereinfacht die Suche (glaub ich auch).
Danke für deine Hilfe.

MfG Jan

PS: Frage mich immer noch warum deine Lösung jetzt bei mir klappt obwohl ich mir fast sicher bin, dass ich zwischendurch bei meinen 1000 Versuchen sowas ähnliches da stehen hatte :smiley:

Hallo Jan,

So durchsucht er immer nur den Bereich der zwischen recentGB
und holdGB liegt. Letztendlich ist das genau das wonach ich
gesucht habe und vereinfacht die Suche (glaub ich auch).

Die Verkleinerung des Suchbereiches kann die Suche natürlich beschleunigen.

PS: Frage mich immer noch warum deine Lösung jetzt bei mir
klappt obwohl ich mir fast sicher bin, dass ich zwischendurch
bei meinen 1000 Versuchen sowas ähnliches da stehen hatte :smiley:

*grins* Sehr bekanntes Phänomen, erlebt wohl jeder öfters, man hat Code, der klappt nicht, man ändert, klappt immer noch nicht, das geht dann permanent so.

dann fragt man in einem Forum nach, erhält eine Lösung die verteufelt nach einem Code aussieht, den man doch schon selbst ausprobiert hat :frowning:

Mein problem ist, ich nehme das gelegentlich zu 98% an, d.h. ich weiß das nicht zu 100% :frowning:
Um sowas exakt herauszufinden müßte ich mein Testverhalten gewaltig ändern.
Jeden getesteten Code der nicht funktioniert kopieren und neu einfügen, dann einen der zwei gleichen Codes auskommetieren, den anderen abändern usw.

Dann kann ich locker überprüfen ob ich die Lösung die von Dritten kommt, so schon hatte und warum auch immer nicht kapiert habe daß dies die Lösung ist, gibt da viele Gründe dafür, oder ob ich diese Lösung so halt noch nicht hatte.

*ähem* ich glaub, ich mach so weiter wie bisher :smile:
Alten testcode nur dann „merken“, wenn ich völlig neu aufgebauten bastle.

Achja zu dir, mit meinem XL2000 kann ich das nicht tun. Den benannten Parameter „Searchformat“ den ich weggetan habe, experimentiere mal bitte mit dem.

Schau in der Hilfe welche Zustände man dem angeben kann, True/false oder sonstwas und probiere das aus.
Und teste das an einfacher Testumgebung.
Zumindest müßtest du dadurch herausfinden ob es an diesem Parameter gelegen hat.

Wenn nämlich nicht, habe ich keinerlei Deutung für das Verhalten von FIND.

Gruß
Reinhard