Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1148to1152
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

FindNext

FindNext
Gregor
Hallo zusammen
Ich habe einen Code mit der Funktion Find und FindNext "zusammengebastelt". Es geht darum, in einer umfangreichen Tabelle gewünschte Auswertungskriterien (Namen, Jahr, Priotität) in definierten Spalten zu finden (mit Find-, FindNext oder ForEach-Abfragen). Bei der ersten Find-Funktion erg ("Wüest") erhalte ich nach der 2. Do-Abfrage ein Nothing, obwohl es im Suchbereich erg noch viele weitere Zellen mit dem Kriterium "Wüest" gibt. Leider kann ich die Tabelle nicht hochladen, weil zu umfangreich. Kann mir dennoch jemand sagen, was in diesem Code falsch ist oder wie ich den Code logischer (schnelle Abfrage) aufbauen kann?
Sub IK()
' übirge Varianblen mit Public definiert
Dim firstAddress, firstAddress2
Dim erg As Range, erg1 As Range, erg2 As Range
'---eruiert Anfang und Ende des Suchbereich
Anfang = Columns(Spalte_P_RV_IK).Find("Wüest", LookAt:=xlWhole).Row - 1
Ende = Columns(Spalte_P_RV_IK).Find("Wüest", LookAt:=xlWhole, searchdirection:=xlPrevious). _
Row
Set rng = Sheets("Master Datei").Columns(Spalte_P_RV_IK)
Set erg = rng.Find("Wüest", LookAt:=xlWhole)
If Not erg Is Nothing Then
firstAddress = erg.Address
Zeile = erg.Row
'--- prüfen, ob eruierte Zeile der obersten Zeile Bahnhof entspricht
If IsEmpty(Cells(Zeile, 1)) And IsEmpty(Cells(Zeile, 2)) = True Then
Zeile = Cells(Zeile, 1).End(xlUp).Row
End If
ZeileEnd = IIf(IsEmpty(Cells(Zeile + 1, 1)), IIf(IsEmpty(Cells(Cells(Zeile, 1).End( _
xlDown).Row - 1, Spalte_Nutzlänge)), Cells(Cells(Zeile, 1).End(xlDown).Row, Spalte_Nutzlänge).End(xlUp).Row, Cells(Zeile, 1).End(xlDown).Row - 1), Zeile)
'--- eruiert zu durchsuchenden rng Jahre
Set rng1 = Union(Worksheets("Master Datei"). _
Range(Cells(Zeile, Spalte_P_Länge), Cells(ZeileEnd, Spalte_P_Länge)), _
Range(Cells(Zeile, Spalte_P_Höhe), Cells(ZeileEnd, Spalte_P_Höhe)), _
Range(Cells(Zeile, Spalte_treppenfrei), Cells(ZeileEnd, Spalte_treppenfrei)))
'---Handlungsbedarf alle Jahre
If Jahr1 = "alle Jahre" And Jahr2 = "alle Jahre" Then
If WorksheetFunction.CountA(rng1) > 0 Then Handlungsbedarf = True
Else
'---Handlungsbedarf ausgewählte Jahre
For Each erg1 In rng1.Cells
If erg1.Value >= Jahr1 * 1 And erg1.Value  firstAddress2
End If
End Select
End If
Do
Set erg = rng.FindNext(erg)
Zeile = erg.Row
'--- prüfen, ob eruierte Zeile der obersten Zeile Bahnhof entspricht
If IsEmpty(Cells(Zeile, 1)) And IsEmpty(Cells(Zeile, 2)) = True Then
Zeile = Cells(Zeile, 1).End(xlUp).Row
End If
ZeileEnd = IIf(IsEmpty(Cells(Zeile + 1, 1)), IIf(IsEmpty(Cells(Cells(Zeile, 1).End( _
xlDown).Row - 1, Spalte_Nutzlänge)), Cells(Cells(Zeile, 1).End(xlDown).Row, Spalte_Nutzlänge).End(xlUp).Row, Cells(Zeile, 1).End(xlDown).Row - 1), Zeile)
'--- eruiert zu durchsuchenden rng Jahre
Set rng1 = Union(Worksheets("Master Datei"). _
Range(Cells(Zeile, Spalte_P_Länge), Cells(ZeileEnd, Spalte_P_Länge)), _
Range(Cells(Zeile, Spalte_P_Höhe), Cells(ZeileEnd, Spalte_P_Höhe)), _
Range(Cells(Zeile, Spalte_treppenfrei), Cells(ZeileEnd, Spalte_treppenfrei)))
'---Handlungsbedarf alle Jahre
If Jahr1 = "alle Jahre" And Jahr2 = "alle Jahre" Then
If WorksheetFunction.CountA(rng1) > 0 Then Handlungsbedarf = True
Else
'---Handlungsbedarf ausgewählte Jahre
For Each erg1 In rng1.Cells
If erg1.Value >= Jahr1 * 1 And erg1.Value  firstAddress2
End If
End Select
End If
Loop While Not erg Is Nothing And erg.Address  firstAddress
End If
Application.StatusBar = False
End Sub
Vielen Dank
Gregor

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
wer soll dies nachbauen? oT. (Frage offen)
29.03.2010 11:58:10
Tino
AW: FindNext
29.03.2010 15:30:56
Nepumuk
Hallo,
klar, du löschst doch mit dem Find innerhalb der Schleife den 1. wieder. Find lässt sich nicht verschachteln, du musst an Stelle von FindNext die Methode neu aufsetzen.
Gruß
Nepumuk
AW: FindNext
29.03.2010 15:39:22
Gregor
Hallo Nepumuk
Vielen Dank für den Hinweis. In diesem Fall muss ich die Abfrage innterhalb der Schleife vermutlich mit ForEach durchführen und eine längere Durchlaufzeit in Kauf nehmen.
Danke und Gruss
Gregor

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige