Office Forum
www.Office-Loesung.de
Access :: Excel :: Outlook :: PowerPoint :: Word :: Office :: Wieder Online ---> provisorisches Office Forum <-
Schleifen
zurück: Array als Funktionsrückgabe weiter: Wie spreche ich eine Tabelle an Unbeantwortete Beiträge anzeigen
Neues Thema eröffnen   Neue Antwort erstellen     Status: Information Facebook-Likes Diese Seite Freunden empfehlen
Zu Browser-Favoriten hinzufügen
Autor Nachricht
Isabelle :-)
Menschin


Verfasst am:
01. Jun 2013, 11:15
Rufname:
Wohnort: Westlicher Spiralarm der Galaxis


Schleifen - Schleifen

Nach oben
       Version: Office 2k (2000)

Hallöchen,

weil Schleifen eines unserer wichtigsten Werkzeuge sind, wollen wir sie uns etwas genauer anschauen.

Die verschiedenen Arten von Schleifen:

For-Next - Schleife
Do-Loop - Schleife

Früher gab es noch die While-Wend - Schleife, die aber ein Auslaufmodell ist und darum nicht mehr benutzt werden sollte.

Von der For-Next - Schleife gibt es drei Varianten.

Einmal die mit einer numerischen Schleifenvariablen:

Code:
For lngIndex = 1 To 10
    'Code der in der Schleife abgearbeitet wird
Next


Einmal die mit einer Objektvariablen als Schleifenvariablen um ein Auflistungs-Objekt zu durchlaufen:

Code:
For Each objWorksheet in Worksheets
    'Code der in der Schleife abgearbeitet wird
Next


Einmal die mit einer Variant-Variablen als Schleifenvariable um die Einträge in einem Variant-Array (auch mehrdimensionale) oder das Array einer Klasse zu durchlaufen (Arrays eines benutzerdefinierten Datentyps können nicht mit For-Each durchlaufen werden):

Code:
For Each vntItem in avntArray
    'Code der in der Schleife abgearbeitet wird
Next


Erstere läuft vom Startwert bis zum Endwert in diskreten Schritten. Wobei die Schrittweite einstellbar ist. Standard ist die Schrittweite 1.

Wollen wir z.B. in Zweierschritten durchlaufen dann so:

Code:
For lngIndex = 1 To 10 Step 2
    'Code der in der Schleife abgearbeitet wird
Next


Wollen wir z.B. in Zehntelschritten durchlaufen, dann so:

Code:
For dblIndex = 1 To 10 Step 0.1
    'Code der in der Schleife abgearbeitet wird
Next


Wir können so eine Schleife durch eine negative Schrittweite auch rückwärts laufen lassen. Dabei muss natürlich der Startwert der Schleife größer sein als der Endwert:

Code:
For lngIndex = 10 To 1 Step -1
    'Code der in der Schleife abgearbeitet wird
Next


Die Schleife wir automatisch verlassen, sobald unsere Schleifenvariable bei vorwärts laufenden Schleifen größer, bei rückwärts laufenden Schleifen kleiner den Endwert wird. Die Schleifenvariable wird bei vorwärts laufenden Schleifen durch die Next-Anweisung um die Schrittweite erhöht, bei rückwärts laufenden Schleifen verringert.

Im Beispiel für den Zweierschritt wird der Endwert der Schleife eigentlich nicht erreich, denn die Schritte laufen ja so: 1, 3, 5, 7, 9, 11. Da 11 über dem Endwert 10 liegt wird sie bei 11 natürlich trotzdem verlassen.

Ist unser Programm erst mal durch diese erste Zeile der Schleife gelaufen, sind weder Start- noch Endwert oder Schrittweite mehr änderbar. Auch wenn alle oder auch nur einer dieser Parameter eine Variabel ist.

Code:
Public Sub Test1()
    Dim lngIndex As Long
    Dim lngStart As Long
    Dim lngEnd As Long
    Dim lngStep As Long
    lngStart = 1
    lngEnd = 10
    lngStep = 2
    For lngIndex = lngStart To lngEnd Step lngStep
        'Code der in der Schleife abgearbeitet wird
    Next
End Sub


Das einzige worauf wir Einfluss nehmen können ist die Schleifenvariabel selbst. Erhöhen wir innerhalb der Schleife ihren Wert um die Schrittweite, bekommen wir bei vorwärts laufenden Schleifen einen Durchlauf weniger. Verringern wir ihren Wert um die Schrittweite, bekommen wir bei vorwärts laufenden Schleifen einen Durchlauf mehr. Bei rückwärts laufenden Schleifen natürlich genau umgekehrt. Aber vorsichtig damit umgehen, denn auf diese Weise können wir schnell eine Endlosschleife produzieren:

Code:
For lngIndex = 1 To 10
    lngIndex = lngIndex - 1
Next

Hier kann die Schleifenvariable nie ihren Endwert erreichen und lauft so lange bis wir Excel gewaltsam beenden.

Bei For-Next – Schleifen mit einer Objektvariablen für Auflistungs-Objekte oder einer Variant-Variablen für Variant-Arrays / Klassen-Arrays als Schleifenvariable gibt es nur eine Richtung. Nämlich vom ersten Objekt in der Auflistung bis zum letzten Objekt bzw. von ersten Eintrag im Array bis zum letzten.

Wir können alle For-Next – Schleifen mit der Anweisung:

Code:
Exit For

vorzeitig abbrechen. Dann macht das Programm automatisch mit der auf Next folgenden Zeile weiter. Wenn wir innerhalb der Schleife mehrere Abfragen haben, können wir auch mehrere Exit For einbauen, um die Schleife bei der einen oder der anderen Bedingung zu vorzeitig zu verlassen.

Code:
Public Sub Test2()
    Dim lngIndex As Long
    For lngIndex = 1 To 10
        'Code der in der Schleife abgearbeitet wird
        If Bedingung1 Then Exit For
        'Code der in der Schleife abgearbeitet wird
        If bedingung2 Then Exit For
        'Code der in der Schleife abgearbeitet wird
    Next
    'Hier geht's weiter
End Sub





Bei Do-Loop - Schleifen unterscheiden wir zwischen Kopf- und Fußgesteuerten Schleifen.

Kopfgesteuert:

Code:
Do While / Until Bedingung

Fußgesteuert:

Code:
Loop While / Until Bedingung


While ~ Gehe in die / Bleibe in der Schleife, solange die Bedingung erfüllt ist
Until ~ Gehen in die / Bleibe in der Schleife, bis die Bedingung erfüllt ist

Da wir hier die Wahl haben, sollten wir die Bedingung immer so formulieren das sie auf = hinausläuft. Ein Vergleich mit = ist erheblich schneller als mit <>. Wenn die Bedingung lautet: Bleibe so lange in der Schleife bis z.B. ein String leer ist, dann ist:

Code:
Until strTestString = vbNullString

schneller als:

Code:
While strTestString <> vbNullString

In den allermeisten Fällen können wir mit Until arbeiten.

Bei der Kopfgesteuerten Schleifen wird diese nicht ausgeführt, wenn mit While die Bedingung schon, oder mit Until die Bedingung nicht erfüllt ist.
Bei Fußgesteuerten Schleifen wird sie mindestens einmal ausgeführt, da die Bedingung erst am Ende der Schleife abgefragt wird.

In manchen Fällen setzen wir auch Do-Loop - Schleifen ein, die weder im Kopf noch im Fuß eine Bedingung habe, sondern in denen innerhalb der Schleife Bedingungen abgefragt werden um die Schleife mit Exit Do zu verlassen. Wie bei der For-Next - Schleife können wir auch in der Do-Loop - Schleife bei mehrere Abfragen Exit Do einsetzen und so die Schleife an verschiedenen Stellen verlassen. Das Programm macht dann mit der auf Loop folgenden Zeile weiter. Natürlich können auch Kopf- / Fußgesteuerte Schleifen vorzeitig verlassen werden.

Code:
Public Sub Test3()
    Do
        'Code der in der Schleife abgearbeitet wird
        If Bedingung1 Then Exit Do
        'Code der in der Schleife abgearbeitet wird
        If bedingung2 Then Exit Do
        'Code der in der Schleife abgearbeitet wird
    Loop
    'Hier geht's weiter
End Sub


So, ich hoffe ich habe nichts vergessen. Falls doch, dann schreibt mir eine PM damit ich das noch einarbeiten kann.

Ein Dank für Korrekturen geht an:

Steffl

_________________
LG Isi

Die Mitgliedschaft im Forum erhöht deine Chance auf eine Antwort von mir um 99,999%
Neues Thema eröffnen   Neue Antwort erstellen Alle Zeiten sind
GMT + 1 Stunde

Diese Seite Freunden empfehlen

Seite 1 von 1
Gehe zu:  
Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum nicht posten
Du kannst Dateien in diesem Forum herunterladen

Verwandte Themen
Forum / Themen   Antworten   Autor   Aufrufe   Letzter Beitrag 
Keine neuen Beiträge Excel VBA (Makros): Zu viele Schleifen 4 magic_al 300 05. Jul 2011, 17:13
magic_al Zu viele Schleifen
Keine neuen Beiträge Excel VBA (Makros): bräuchte hilfe in vba bzgl. schleifen 50 der daniel 1518 08. Jun 2011, 13:13
Gast bräuchte hilfe in vba bzgl. schleifen
Keine neuen Beiträge Excel VBA (Makros): For Schleifen dynamisch erstellen 3 joko123 399 09. Nov 2010, 12:37
joko123 For Schleifen dynamisch erstellen
Keine neuen Beiträge Excel VBA (Makros): Excel 2007 hängt sich bei Schleifen immer auf 6 sv_t 501 08. Nov 2010, 21:31
Gast Excel 2007 hängt sich bei Schleifen immer auf
Keine neuen Beiträge Excel VBA (Makros): HILFE! Brauche ne VBA Funktion mit Schleifen 0 Gast 191 31. Mai 2010, 11:42
Gast HILFE! Brauche ne VBA Funktion mit Schleifen
Keine neuen Beiträge Excel VBA (Makros): Daten eintragen über Schleifen "zu langsam" 8 thowe 495 10. Mai 2010, 08:53
thowe Daten eintragen über Schleifen "zu langsam"
Keine neuen Beiträge Excel VBA (Makros): Schleifen und Arrays 10 Pointless 386 04. März 2010, 12:01
Pointless Schleifen und Arrays
Keine neuen Beiträge Excel VBA (Makros): Hilfe! Makro durchläuft nur eine von zwei Schleifen 1 flex2305 283 22. Dez 2009, 20:58
r.mueller Hilfe! Makro durchläuft nur eine von zwei Schleifen
Keine neuen Beiträge Excel VBA (Makros): Summeprodukt in Makro oder lieber paar Schleifen mit If? 2 Michael@office 288 30. Jul 2009, 18:40
Phelan XLPH Summeprodukt in Makro oder lieber paar Schleifen mit If?
Keine neuen Beiträge Excel VBA (Makros): Einfügen von Schleifen für Kontrollkästchen 1 Artur2109 289 22. Okt 2008, 11:24
Mac4 Einfügen von Schleifen für Kontrollkästchen
Keine neuen Beiträge Excel VBA (Makros): Makros verknüpfen, Problem mit Schleifen 1 stef.k 284 04. Aug 2008, 15:04
pefeu Makros verknüpfen, Problem mit Schleifen
Keine neuen Beiträge Excel VBA (Makros): Zwei For Each schleifen 1 kangoos 796 11. März 2008, 15:40
Trebinuk Zwei For Each  schleifen
 

----> Diese Seite Freunden empfehlen <------ Impressum - Besuchen Sie auch: HTML CSS