VBA .find.(...).row funktion - Alle Zeilen/Treffer auslesen?

Moderator: ModerationP

Re: VBA .find.(...).row funktion - Alle Zeilen/Treffer ausle

Beitragvon Flotter Feger Gast » 15. Jun 2018, 08:06

Hallo,

wenn jeder Fund mit anderen Werten überschrieben werden soll, dann muss doch Schluss sein, wenn der Wert nict mehr gefunden wird ... na dann doch einfach so ...
Ist aber tatsächlich nicht der Sinn an Range.Find ... aber gut.
Code: Alles auswählen
Sub test()
Dim c As Range
Dim firstaddress As String

With Worksheets(1).Range("A:A")
    Set c = .Find(2, LookIn:=xlValues)
    If Not c Is Nothing Then
        firstaddress = c.Address
        Do
            c.Value = 5
            Set c = .FindNext(c)
        Loop While Not c Is Nothing
    End If
End With
End Sub

Sabina
Flotter Feger Gast
 

Re: VBA .find.(...).row funktion - Alle Zeilen/Treffer ausle

Beitragvon RPP63 » 15. Jun 2018, 08:17

Was hat das denn jetzt noch mit der Threaderöffnung zu tun?
Zur konkreten Find-FindNext-Schleife, die hier seit geraumer Zeit benutzt wird:
Sowas macht man schneller und einfacher mit der Range.Replace-Methode (siehe auch meinen verlinkten Thread)!
Anyway sucht der TE doch die einzelnen Zeilen(!), in denen die ID gefunden wird, um in den Zeilen in manchen Spalten etwas zu ändern.

Dafür hat er bereits zwei Vorschläge mit SpecialCells (Wahrheitswert oder sichtbar bei Filter).

Vielleicht bekommen wir ja mal konkret gesagt, was das Makro machen soll …

Gruß Ralf
Benutzeravatar
RPP63
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 9716
Registriert: 19. Okt 2012, 17:41
Wohnort: mitten im Pott

Re: VBA .find.(...).row funktion - Alle Zeilen/Treffer ausle

Beitragvon Flotter Feger Gast » 15. Jun 2018, 08:43

Hallo Ralf,

ich weiß das ... wollte nur höflich sein und auf seine Frage antworten ... nicht, dass mir wieder unterstellt wird, ich wäre Arrogant und würde nicht mal auf einfachste Probleme vernünftig antworte.

Ist manchmal schon ein starkes Stück, was man sich hier bieten läßt ... ja ich weiß ... selbst schuld ... ich muss hier nicht mitmachen ...

Sabina
Flotter Feger Gast
 

Re: VBA .find.(...).row funktion - Alle Zeilen/Treffer ausle

Beitragvon RPP63 » 15. Jun 2018, 08:49

Ich hab Dich doch gar nicht persönlich gemeint, Sabina! :wink:
Die Schleife geistert ja bereits seit geraumer Zeit durch diesen Thread.
Mir ging es "nur" darum, den Thread mal wieder in die richtige Richtung zu schubsen.

Gruß Ralf
Benutzeravatar
RPP63
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 9716
Registriert: 19. Okt 2012, 17:41
Wohnort: mitten im Pott

Re: VBA .find.(...).row funktion - Alle Zeilen/Treffer ausle

Beitragvon theRock » 15. Jun 2018, 09:30

Entschuldigt leute, ich weiß das hier wirklich sehr zu schätzen.
bin nur momentan etwas am struggeln und bei mir ist noch eine (private) Baustelle aufgekommen, deswegen das kurze und wenige Feedback von mir.

so wie RPP63 es sagt ist es richtig, ich benötige die Zeilen um in diesen entsprechend weiterarbeiten zu können. Das war bei einer einmaligen ID ja immer easy über find.(...).row erledigt

Ich dachte die FindNext Schleife kann ich so umauen das ich mir aus der gefunden Addresse die Zeile rausnehme. Schaue mir aber auch die specialcells Methode an!
Wenn ich soweit bin gebe ich mehr Feedback danke euch wirklich sehr!

Mit den zwei Gedankenanstößen habt ihr mir schon sehr geholfen.
Ein konkretes Makro wird schwer da es mittlerweile >500 Zeilen groß ist :)
theRock
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 19
Registriert: 31. Jan 2018, 08:21

Re: VBA .find.(...).row funktion - Alle Zeilen/Treffer ausle

Beitragvon slowboarder » 15. Jun 2018, 12:45

Hi

wenn man mit dem .FindNext arbeitet, muss man drei Problemfälle unterscheiden:

a) alle FundZellen werden gelöscht oder verändert (so wie im Hilfebeispiel)
dann muss die Abbruchprüfung lauten:
Code: Alles auswählen
Loop While c is Nothing

die Prüfung c.Address <> firsaddress darf nicht erfolgen, weil sie dann einen Fehlerabbruch bewirkt

b) alle FundZellen bleiben unverändert erhalten (die Veränderungen finden in anderen Zellen statt) und es werden keine Zeilen gelöscht
dann muss die Abbruchprüfung lauten:
Code: Alles auswählen
c.Address <> firstaddress

die Prüfung c is Nothing kann man dann in der Schleife weglassen, weil sie nie wahr wird (sie muss nur einmalig vor der Schleife stattfinden, um zu prüfen ob die Schleife überhaupt gestartet werden muss)

schwieriger ist Fall c:
c) die Fundzellen können abhängig von anderen Bedingungen gelöscht oder verändert werden, die können aber auch erhalten bleiben
in diesem Fall braucht man in der Schleife beide Prüfungen:
- alle Fundstellen entfernt (c is Nothing)
- Schleife beginnt wieder von vorne. das Loop while c.Address <> fristaddress ist hierbei aber ungeeignet, denn es könnte ja sein, dass diese Fundstelle gelöscht oder verändert wurde, und dann ist es eine Endlosschleife.
die Prüfung auf c is Nothing muss aber dann zuerst erfolgen, um Fehlerabbrüche zu vermeiden.

Code: Alles auswählen
Sub test()
Dim c As Range
Dim ZeileLetzterFund As Long

With Worksheets(1).Range("A:A")
    Set c = .Find(2, LookIn:=xlValues)
    If Not c Is Nothing Then
        ZeileLetzterFund = c.Row
        Do
            If c.Row Mod 2 = 0 Then c.Value = 5
           
            Set c = .FindNext(c)
        If c Is Nothing Then Exit Do
        If c.Row <= ZeileLetzterFund Then Exit Do
            ZeileLetzterFund = c.Row
        Loop
    End If
End With
End Sub


Gruß Daniel
slowboarder
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 24687
Registriert: 18. Apr 2009, 13:33

Re: VBA .find.(...).row funktion - Alle Zeilen/Treffer ausle

Beitragvon DerHoepp » 15. Jun 2018, 19:41

Moinsen,

noch zum Thema der falschen Onlinehilfe. Die ist zwischenzeitlich ein GitHub projekt. Jeder darf Änderungen vorschlagen und wird dann sogar als conributor geführt.

Viele Grüße
derHöpp
DerHoepp
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 7137
Registriert: 14. Mai 2013, 11:08

Re: VBA .find.(...).row funktion - Alle Zeilen/Treffer ausle

Beitragvon Gast » 16. Jun 2018, 06:28

a) alle FundZellen werden gelöscht oder verändert (so wie im Hilfebeispiel)
dann muss die Abbruchprüfung lauten:

Code: Alles auswählen
Loop While c is Nothing


Loop While Not c is Nothing

Loop Until c is Nothing
Gast
 

Re: VBA .find.(...).row funktion - Alle Zeilen auslesen? [Er

Beitragvon theRock » 18. Jun 2018, 07:48

Hey Leute,

besten Danke,
hatte mich am WE nochmal rangewagt nachdem sich die Lage bei mir etwas beruhigt hatte.
erfolgriehc gelöst hatte ich es nun mit der replace. Methode von sloboarder, Den erste Treffer ersetzt, dann an der ersetzten(gefundenen) Zeilennummer mein Code durchlaufen lassen, zweiten treffer ersetzt, falls vorhanden und erneut meinen code durchlaufen lassen etc...
Vielen Dank, wieder eine Menge gelernt :-)
Tolles Forum, tolle User!
theRock
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 19
Registriert: 31. Jan 2018, 08:21

Re: VBA .find.(...).row funktion - Alle Zeilen/Treffer ausle

Beitragvon snb » 18. Jun 2018, 08:38

Aber fehlende Beispieldatei...

Deswegen keine optimale Lösung.
snb
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 6064
Registriert: 25. Sep 2014, 16:37

Vorherige

Zurück zu Excel Forum (provisorisch)

Wer ist online?

Mitglieder in diesem Forum: Hajo_Zi und 17 Gäste