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