Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Suche von unten nach oben m. FindNext?

Forumthread: Suche von unten nach oben m. FindNext?

Suche von unten nach oben m. FindNext?
06.07.2008 10:41:00
unten
Excel-Level: mittelgut
Hallo liebe Forumsmitglieder!
Mit einer Userform versuche ich Vokabeln aus einer Tabelle in Steuerelement-Textfelder einzulesen.
In der Userform gibt es 15 Textfelder. Auf Druck eines Commandbuttons namens "cmdErsteSuche" sucht ein Makro ein in das Suchbegriff-Textfeld "txtGesucht" eingegebenes Wort mit "Find" und "FindNext". Wenn mehr als 15 Einträge des Suchbegriffs in der Tabelle vorhanden sind, werden zunächst nur die ersten 15 Einträge gesucht und eingetragen (weil es ja nur die 15 Textfelder zum Eintragen gibt).
Rechts neben dem genannten Commandbutton befindet sich ein weiterer "cmd_Weiter". Wenn man diesen
drückt, werden mit "Findnext" (in Verbindung mit "After:= ActiveCell") die nächsten 15 Vorkommnisse des
Suchbegriffs gesucht und gefunden.
So geht es weiter, immer weiter nach unten in der Tabelle. Klappt auch ganz gut.
Mein Problem: Ich würde, wenn ich auf diese Weise ein paar Mal nach unten "gescrollt" habe, dann auch
in der umgekehrten Richtung in der Tabelle von unten nach oben suchen können, d.h. die 15 jeweils vorangegangenen Suchbegriffe suchen und in die Textfelder eintragen lassen (z.B. mit einem wieteren Commandbutton). Doch leider gibt es für die FindNext-Anweisung keine Ergänzung von der Art "Before:=ActiveCell".
Wie kann man so ein Problem lösen? Kann man mit FindNext auch von unten nach oben suchen? Hat jemand von euch eine Idee? Dank!!
Werner R.

Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Suche von unten nach oben m. FindNext?
06.07.2008 10:54:00
unten
Hallo,
so weit ich weis gibt es keine Rückwertsuche in Excel, Du müsstest Dir eine Schleife bauen die
den Zellbereich ab einer bestimmten Zelle nach oben durchläuft.
Gruß Tino

www.VBA-Excel.de


AW: Suche von unten nach oben m. FindNext?
06.07.2008 11:00:20
unten
HAllo

Doch leider gibt es für die FindNext-Anweisung keine Ergänzung von der Art "Before:=ActiveCell". 


Dann schau dir doch mal die


FindPrevious-Methode

an.
ransi

Anzeige
Aber natürlich!
06.07.2008 11:09:00
Werner
Hallo Ransi,
das ist natürlich die Lösung!! Toll, umwerfend! Ich habe diesen Befehl völlig vergessen gehabt!
Tausend Dank! Werner R.

Schleife ist ziemlich langsam
06.07.2008 11:07:33
Werner
Hallo Tino,
dann könnte ich "Find" und "FindNext" gar nicht einsetzen? Das Verfahren wäre dann sehr langsam
(z.N. mit "For Each c in UsedRange"... Next c" oder ähnlich).
Gedacht hatte ich auch an eine Arrayvariable (muss global sein), die die Ergebnisse der ersten Suchen, die ja alle von oben nach unten laufen, speichert. Beim Rückwärtssuchen würde man die Werte aus dieser
Variable einfach wieder auslesen.
Ich hoffe jedoch trotzdem, dass es noch eine praktikablere Lösung gibt.
Das hier geschilderte Problem tritt doch wohl gar nicht so selten auf, sondern kann bei Listenelementen
jeder Art entstehen!
Werner R.

Anzeige
AW: Schleife ist ziemlich langsam
06.07.2008 11:20:00
Tino
Hallo,
Ransi hat natürlich recht.
Dies müsste man so in etwa umsetzen.

Dim Zelle As Range
Sub Suche()
Set Zelle = Range("A:A").Find("Hallo")
If Not Zelle Is Nothing Then Debug.Print Zelle.Address
End Sub
Sub SucheVor()
If Not Zelle Is Nothing Then
Set Zelle = Range("A:A").FindNext(Zelle)
End If
If Not Zelle Is Nothing Then Debug.Print Zelle.Address
End Sub
Sub SucheRuck()
If Not Zelle Is Nothing Then
Set Zelle = Range("A:A").FindPrevious(Zelle)
End If
If Not Zelle Is Nothing Then Debug.Print Zelle.Address
End Sub


Gruß Tino

www.VBA-Excel.de


Anzeige
OK
06.07.2008 13:26:00
Werner
Hallo Tino,
das ist mir schon klar, uns war eben nur die Anweisung "FindPrevious" nicht eingefallen.
Trotzdem vielen Dank! Werner R.
;
Anzeige

Infobox / Tutorial

Rückwertsuche in Excel mit FindNext: Eine praktische Anleitung


Schritt-für-Schritt-Anleitung

Um eine Rückwertsuche in Excel mit VBA durchzuführen, kannst du die Find- und FindNext-Methoden nutzen. Hier ist eine Schritt-für-Schritt-Anleitung, um diese Methoden in einer Userform zu implementieren:

  1. Erstelle eine Userform mit 15 Textfeldern (TextBox1 bis TextBox15) und zwei Command Buttons (cmdErsteSuche und cmd_Weiter).

  2. Füge den folgenden VBA-Code in das Modul der Userform ein:

    Dim Zelle As Range
    Dim Suchbegriff As String
    Dim i As Integer
    
    Sub cmdErsteSuche_Click()
       Suchbegriff = Me.txtGesucht.Value
       Set Zelle = Range("A:A").Find(Suchbegriff)
    
       If Not Zelle Is Nothing Then
           For i = 1 To 15
               If Not Zelle Is Nothing Then
                   Me.Controls("TextBox" & i).Value = Zelle.Value
                   Set Zelle = Range("A:A").FindNext(Zelle)
               Else
                   Exit For
               End If
           Next i
       End If
    End Sub
    
    Sub cmd_Weiter_Click()
       For i = 1 To 15
           If Not Zelle Is Nothing Then
               Me.Controls("TextBox" & i).Value = Zelle.Value
               Set Zelle = Range("A:A").FindNext(Zelle)
           Else
               Exit For
           End If
       Next i
    End Sub
  3. Für die Rückwärtssuche kannst du die FindPrevious-Methode implementieren. Füge einen weiteren Command Button (cmd_Rueckwaerts) hinzu und verwende den folgenden Code:

    Sub cmd_Rueckwaerts_Click()
       For i = 1 To 15
           If Not Zelle Is Nothing Then
               Set Zelle = Range("A:A").FindPrevious(Zelle)
               If Not Zelle Is Nothing Then
                   Me.Controls("TextBox" & i).Value = Zelle.Value
               Else
                   Exit For
               End If
           End If
       Next i
    End Sub

Häufige Fehler und Lösungen

  • Fehler: Object variable or With block variable not set

    • Lösung: Stelle sicher, dass die Variable Zelle korrekt mit der Find-Methode initialisiert wurde, bevor du FindNext oder FindPrevious aufrufst.
  • Fehler: Keine Ergebnisse gefunden

    • Lösung: Überprüfe den Suchbegriff und stelle sicher, dass die gesuchte Zelle in dem angegebenen Bereich vorhanden ist.

Alternative Methoden

Wenn die Verwendung von Find und FindNext nicht die gewünschten Ergebnisse liefert, kannst du alternativ eine Schleife verwenden, um durch den Zellbereich zu iterieren. Hier ein Beispiel:

Dim Zelle As Range
For Each Zelle In Range("A1:A100")
    If Zelle.Value = Suchbegriff Then
        ' Hier kannst du die Werte in die Textfelder eintragen
    End If
Next Zelle

Diese Methode ist möglicherweise langsamer, bietet jedoch mehr Kontrolle über den Suchprozess.


Praktische Beispiele

Angenommen, du hast eine Liste von Vokabeln in Spalte A und möchtest die letzten 15 Vorkommnisse eines bestimmten Wortes finden. Mit der oben beschriebenen Methode kannst du dies schnell umsetzen. Hier ist ein Beispiel für eine Rückwärtssuche:

Sub Rueckwaerts()
    Dim Suchbegriff As String
    Dim Zelle As Range
    Dim i As Integer

    Suchbegriff = "Hallo"
    Set Zelle = Range("A:A").Find(Suchbegriff)

    If Not Zelle Is Nothing Then
        For i = 1 To 15
            Set Zelle = Range("A:A").FindPrevious(Zelle)
            If Not Zelle Is Nothing Then
                ' Werte in Textfelder eintragen
            Else
                Exit For
            End If
        Next i
    End If
End Sub

Tipps für Profis

  • Nutze Arrays: Speichere die gefundenen Werte in einem Array, um die Performance zu verbessern, besonders bei großen Datenmengen.
  • Fehlerbehandlung: Implementiere eine Fehlerbehandlung, um sicherzustellen, dass dein Code robust ist und keine unerwarteten Fehler auftritt.

FAQ: Häufige Fragen

1. Kann ich Find auch in mehreren Spalten gleichzeitig verwenden?
Ja, du kannst die Find-Methode in einem definierten Bereich verwenden, der mehrere Spalten umfasst.

2. Was ist der Unterschied zwischen FindNext und FindPrevious?
FindNext sucht nach dem nächsten Vorkommen des Suchbegriffs, während FindPrevious das vorhergehende Vorkommen sucht.

3. Funktioniert dies in allen Excel-Versionen?
Die beschriebenen Methoden sollten in Excel 2007 und späteren Versionen funktionieren, die VBA unterstützen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige