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

Forumthread: For each Schleife beenden

For each Schleife beenden
11.02.2016 14:05:42
Florian
Hallo zusammen,
ich habe folgendes Problem.
Ich suche in einer Spalte in der Buchstaben stehen und auch leere Zellen vorkommen über for each zelle in selection anhand ein Range einen bestimmten Buchstaben.
Leider schaffe ich es nicht den Suchlauf zu beenden obwohl die Range nach unten fix ist.
Bin für jede Hilfe dankbar!

Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: For each Schleife beenden
11.02.2016 14:13:19
Peter
Hallo Florian,
dann selektiere einige Zellen und lass einmal das beigefügte Makro laufen.
Option Explicit
Public Sub Suchen()
Dim rZelle  As Range
For Each rZelle In Selection
MsgBox rZelle.Address(0, 0)
Next rZelle
End Sub

Gruß Peter

Anzeige
AW: For each Schleife beenden
11.02.2016 20:11:41
Piet
hallo
hier mal ein paar praktische Beispiele wie man einen Suchlauf beenden kann.
Eine For Next Schleife ist nur sinnvoll bei kleinen Datenmengen, ca. 100 Zeilen.
Viel eleganter und schneller ist die Find Methode, die man mittels Set Anweisung
ausführen lassen kann, wenn man nur eine Adresse finden will, oder die Standard
Cells.Find().Activate Methode, wenn man die Zelle direkt anspringen will.
Was man waehlt ist völlig wurscht. Jede Methode funktioniert. s. Beispiele
Die Eingabe des Suchnamen kann über eine Zelle erfolgen, hier A1 oder InpuBox.
mfg Piet
'Such-Name gefunden, Aussprung mit Exit For (ohne Aktion)
Sub Suche_beenden_in_For_Next_Schleife()
SuName = Range("A1")   'Suchname in A1
For Each i In Selection
If i.Value = SuName Then Exit For
Next i
End Sub

'Such-Name gefunden, Aktion starten, dann Exit For (mit Aktion)
Sub Suche_beenden_nach_Kopiervorgang()
SuName = Range("A1")   'Suchname in A1
For Each i In Selection
'Such-Name gefunden, Aktion starten, dann Exit For
If i.Value = SuName Then
i.Copy   'kopiere Zelle in Blatt2 - nur Werte, oder alles
Sheet("Blatt2").Range("A1").PasteSpecial xlAll     '(xlValues)
Application.CutCopyMode = False
Exit For
End If
Next i
End Sub

'** Bei der Set Anweisung wird die Zelle -nicht angesprungen-, nur eine Adresse zurückgegeben
' Fehlerfall Auswertung erfolgt über İf rFind Is Nothing ...
Sub Suchen_über_Set_Anweisung()
SuName = Range("A1")   'Suchname in A1
SuName = InputBox("Bitte Buchstaben eingeben")
If SuName = Empty Then Exit Sub
Set rfind = Cells.Find(What:=SuName, After:=Range("A1"), LookIn:=xlFormulas, LookAt:=xlWhole,  _
MatchCase:=True)
If rfind Is Nothing Then MsgBox SuName & "  Buchstabe nicht gefunden"  'Fehler:  "Nicht  _
gefunden"
SuchAdr = rfind.Address   'gefundene Adresse
rfind.Select              'Zelle anspringen
MsgBox SuchAdr            'Text ausgeben
Exit Sub
End Sub

'** Bei Suchen über Find().Activate wird die Zelle -direkt angesprungen-
' im Fehlerfall erfolgt eine Laufzeit Fehlermeldung die man abfangen kann
Sub Suchen_über_Suchen_Cells()
SuName = Range("A1")   'Suchname in A1
SuName = InputBox("Bitte Buchstaben eingeben")
If SuName = Empty Then Exit Sub
On Error GoTo Fehler
'** Bei Suchen über Activate wird die Zelle -direkt angesprungen-
'Suche im ganzen Blatt nach Buchstabe  xlWhole = ganze Zelle
Cells.Find(What:=SuName, After:=[a1], LookIn:=xlFormulas, LookAt:=xlWhole, _
SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:=True).Activate
SuchAdr = ActiveCell.Address   'gefundene Adresse
Exit Sub
Fehler:  MsgBox SuName & "  Buchstabe nicht gefunden"  'Fehler:  "Nicht gefunden"
End Sub

'zum testen SuName bis On Error noch einsetzen (siehe oben)
Sub Suchen_über_Suchen_Range()
'Suche im bestimmten Bereich nach Buchstabe  xlWhole = ganze Zelle
Range("A1:B200").Find(What:=SuName, After:=Range("A1"), LookIn:=xlFormulas, LookAt:= _
xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:=True).Activate
End Sub

'zum testen SuName bis On Error noch einsetzen (siehe oben)
Sub Suchen_über_Suchen_Cells()
'Suche in bestimmten Spalten nach Buchstabe  xlWhole = ganze Zelle
Columns("A:B").Find(What:=SuName, After:=Range("A1"), LookIn:=xlFormulas, LookAt:= _
xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:=True).Activate
End Sub

Anzeige
AW: For each Schleife beenden
17.02.2016 09:54:10
Florian
Vielen Dank für eure Antworten.
Ich hab das Problem mit der Find-Methode das ich mit ihr keine Schleife hinbekommen mit Findnext.
In der Spalte A stehen verschiedene Buchstaben und dazwischen sind leere Zellen und ich möchte anhand der Spalte A Daten aus anderen Spalten weiter verarbeiten.
Die ganzen Beispiele die ich finde funktionieren leider nicht mit leeren Zellen und ich weiß nicht wie ich das anpassen muss.

Anzeige
AW: For each Schleife beenden
17.02.2016 09:59:58
Florian
s.o.
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige

Infobox / Tutorial

For Each Schleife in Excel VBA effizient beenden


Schritt-für-Schritt-Anleitung

Um eine For Each Schleife in Excel VBA vorzeitig zu beenden, kannst Du den Befehl Exit For verwenden. Hier ist eine einfache Schritt-für-Schritt-Anleitung:

  1. Öffne den VBA-Editor in Excel (Alt + F11).

  2. Erstelle ein neues Modul (Rechtsklick auf "VBAProject" > Einfügen > Modul).

  3. Füge den folgenden Code ein:

    Sub SchleifeBeenden()
        Dim rZelle As Range
        For Each rZelle In Selection
            If rZelle.Value = "DeinSuchbegriff" Then
                MsgBox "Suchbegriff gefunden: " & rZelle.Address
                Exit For  ' Beendet die Schleife
            End If
        Next rZelle
    End Sub
  4. Wähle die Zellen aus, in denen Du nach dem Suchbegriff suchen möchtest.

  5. Führe das Makro aus.

Jetzt wird die Schleife beendet, sobald der Suchbegriff gefunden ist.


Häufige Fehler und Lösungen

  • Fehler: Die Schleife beendet sich nicht.

    • Lösung: Stelle sicher, dass Du Exit For an der richtigen Stelle in der Schleife einfügst.
  • Fehler: Fehler bei der Verwendung von Find.

    • Lösung: Bei der Verwendung von Find, achte darauf, dass Du die richtige Syntax verwendest und die Suchparameter korrekt setzt.

Alternative Methoden

Wenn Du eine For Each Schleife vorzeitig beenden möchtest, gibt es auch alternative Methoden:

  1. Find-Methode: Diese Methode ist schneller und eleganter, besonders bei großen Datenmengen.

    Sub SucheMitFind()
        Dim SuName As String
        SuName = Range("A1").Value
        Dim rFind As Range
    
        Set rFind = Cells.Find(What:=SuName)
        If Not rFind Is Nothing Then
            rFind.Select
            MsgBox "Buchstabe gefunden: " & rFind.Address
        Else
            MsgBox "Buchstabe nicht gefunden."
        End If
    End Sub
  2. For Next Schleife: Eine For Next Schleife kann ebenfalls verwendet werden, um durch einen Bereich zu iterieren und die Schleife bei Bedarf zu beenden.


Praktische Beispiele

Hier sind einige praktische Beispiele, wie Du eine For Each Schleife in Excel VBA effektiv nutzen und beenden kannst:

  • Beispiel 1: Vorzeitiges Beenden einer Schleife, wenn ein bestimmter Buchstabe gefunden wird.

    Sub SucheNachBuchstabe()
        Dim rZelle As Range
        For Each rZelle In Range("A1:A100")
            If rZelle.Value = "A" Then
                MsgBox "Buchstabe 'A' gefunden in: " & rZelle.Address
                Exit For
            End If
        Next rZelle
    End Sub
  • Beispiel 2: Nutzung der Find-Methode zur schnellen Suche.

    Sub SucheMitFind()
        Dim rFind As Range
        Set rFind = Range("A1:A100").Find("A")
        If Not rFind Is Nothing Then
            MsgBox "Buchstabe 'A' gefunden in: " & rFind.Address
        Else
            MsgBox "Buchstabe nicht gefunden."
        End If
    End Sub

Tipps für Profis

  • Nutze die Find-Methode für große Datenmengen, um die Leistung zu verbessern.
  • Vermeide es, For Each Schleifen in großen Bereichen ohne Bedingung zu verwenden, um die Effizienz zu steigern.
  • Bei der Verwendung von If-Bedingungen in Schleifen, achte darauf, dass die Bedingungen klar und spezifisch sind, um unerwartete Ergebnisse zu vermeiden.

FAQ: Häufige Fragen

1. Wie kann ich eine For Each Schleife vorzeitig beenden?
Du kannst die Schleife mit dem Befehl Exit For beenden, wenn eine bestimmte Bedingung erfüllt ist.

2. Was ist der Unterschied zwischen For Each und For Next?
For Each wird verwendet, um durch Objekte in einer Sammlung zu iterieren, während For Next nützlich ist, wenn Du durch eine festgelegte Anzahl von Iterationen gehen möchtest.

3. Kann ich die Schleife auch bei leeren Zellen beenden?
Ja, Du kannst eine Bedingung hinzufügen, um leere Zellen zu ignorieren oder die Schleife zu beenden.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige