Nach oben suchen

stummal

Grünschnabel
Hi!

Hat wer eine Ahnung wie ich den Befehl .Find so ändern kann das Excel statt nach unten nach oben durchsucht!?
Hätte es mit SearchDirection:=xlPrevious statt SearchDirection:=xlNext probiert aber er sucht trozdem nach unten..

Wäre toll wenn mir jemand helfen könnte!
LG, Tanja
 
Dieses Beispiel findet alle Zellen im Range von A1 bis A500 auf dem Worksheet und ersetzt die 2 mit der 5. FindNext ist eigentlich als Default-Wert eingestellt, so das immer vorwärts gesucht wird und nicht Rückwärts.

Code:
With Worksheets(1).Range("a1:a500")
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 And c.Address <> firstAddress
End If
End With
 
Hi stummal

Erzeuge Dir mal ne kleine Tabelle, in der in Spalte A verschiedene Werte stehen. Achte darauf, dass die Einträge mehrmals vorkommen. Dann erzeuge ein neues Modul, und kopiere unten stehenden Code hinein.
Code:
Option Explicit

Private Sub SearchTest(ByVal bForward As Boolean, ByVal nOutputRow As Integer)
    Dim nZielZeile              As Integer  ' Zeile für die Ausgabe
    Dim oRange                  As Range    ' Range Objekt für die Suche
    Dim szFirstAddress          As String   ' erste Fundstelle
    Dim szSuchwert              As String   ' Suchbegriff

    Rem ===================================================
    Rem == Suchwert aus aktuellem Sheet merken. Verarbei-==
    Rem == tungsvaribalen initialisieren.                ==
    Rem ===================================================
    szSuchwert = Cells(1, 2).Value
    nZielZeile = 1

    Rem ===================================================
    Rem == Suchbereich festlegen und Werte suchen.       ==
    Rem ===================================================
    With Range("A1:A400")
        Set oRange = .Find(szSuchwert, ActiveCell, _
            LookIn:=xlValues, SearchDirection:=IIf(bForward, xlNext, xlPrevious))
        szFirstAddress = ""

        Rem ===============================================
        Rem == Schleife um in Quelle alle Einträge zu    ==
        Rem == suchen.                                   ==
        Rem ===============================================
        While Not oRange Is Nothing And szFirstAddress <> oRange.Address
            Rem ===========================================
            Rem == Da dieser sch... Findbefehl loopt,    ==
            Rem == merken wir uns die erste Fundstelle   ==
            Rem ===========================================
            If szFirstAddress = "" Then
                szFirstAddress = oRange.Address
            End If
            Cells(nZielZeile, nOutputRow).Value = oRange.Address
            
            Rem ===========================================
            Rem == Und weitersuchen in Quelldatei.       ==
            Rem ===========================================
            nZielZeile = nZielZeile + 1
            Set oRange = IIf(bForward, .FindNext(oRange), .FindPrevious(oRange))
        Wend
    End With
End Sub

Public Sub CallSearch()
    Call SearchTest(True, 4)
    Call SearchTest(False, 5)
End Sub

Nun trägst Du in Zelle B1 den zu suchenden Wert ein; drückst ALT-F8 und führst das Makro "CallSearch" aus. Das Problem ist, dass Du schon angeben must, wo die Suche beginnen soll.
Code:
Set oRange = .Find(szSuchwert, ActiveCell, _
            LookIn:=xlValues, SearchDirection:=IIf(bForward, xlNext, xlPrevious))
Wenn Du also das Makro mehrmals ausführst, und dabei vorher immer wieder eine andere Zelle in der Spalte A wählst, kannst Du sehen, wie der Find korrekt funktioniert.

Gruß
Das Orakel
 
Zurück