Kategorisiert | Excel Makro-und VBA
Schlagwörter | ,

VBA For-Schleife - For Next und für jede Next




Die For-Schleife in VBA ist eine der am häufigsten verwendeten Schleifen in VBA. Die For-Schleife hat zwei Formen: For Next und für jede Next. Die For-Schleife ist in der Regel verwendet, um nacheinander durch eine Liste der Elemente oder Zahlen zu bewegen. Um die for-Schleife zu einem bestimmten Punkt haben wir die Ausfahrt nach Anweisung enden kann. Werfen wir einen genaueren Blick auf jede dieser Schleifen.

for-loop-in-vba

VBA For ... Next-Schleife

Die For ... Next-Schleife hat folgende Syntax:

1
2
3
end_counter Für a_counter = start_counter Um end_counter
'Hier etwas tun
Weiter a_counter

Was wir hier tun, ist im wesentlichen eine Schleife, die eine variable a_counter als "Zeitnehmer" der Schleife verwendet. Wir setzen sie auf einen Wert gleich zu Beginn der Schleife start_counter und dann erhöhen (oder verringern) um 1 während jeder Schleife bis. Die Schleife wird bis in die Zeit der Wert der a_counter gleich end_counter wird auszuführen. Die Schleife führt zum letzten Mal, wenn die beiden oben genannten Werte passen und dann stoppen.

Beispiel für eine for-Schleife

1
2
3
4
5
6
7
Sub my_for_loop1 ()
10 Für a_counter = 1 bis 10
j = a_counter
Weiter a_counter

was " & a_counter msgbox "Der Wert des Zählers in der letzten Schleife war" & a_counter
End Sub

Der endgültige Wert des von der a_counter in der obigen Schleife ist 11.

VBA For-Schleife in umge mit Schritt-Anleitung

Es ist nicht notwendig, daß der Zähler in der for-Schleife nur von einem niedrigeren Wert zu bewegen, um einen höheren Wert - man kann die for-Schleife nach hinten zu haben. Hier ist ein Beispiel für die Schleife in umgekehrter Reihenfolge:

1
2
3
4
5
6
7
Sub my_for_loop2 ()
1 Step -1 Für a_counter = 10 zu 1 Step -1
j = a_counter
Weiter a_counter

was " & a_counter msgbox "Der Wert des Zählers in der letzten Schleife war" & a_counter
End Sub

Der endgültige Wert des a_counter in dieser Schleife 1 ist.

Wie Sie sehen können, können wir den Schritt n Anweisung verwenden, um sicherzustellen, dass die for-Schleife arbeitet entweder vorwärts oder rückwärts. Standardmäßig ist der Schritt nach vorne ist ein Wert, kann aber auf eine Reihe mehr als 1 gesetzt, um für die for-Schleife, um rückwärts zu arbeiten überspringen vorwärts Schleifen oder negativ werden.

VBA For Each ... In ... Next-Schleife

Die For Each ... In ... Next-Schleife hat folgende Syntax:

1
2
3
group_of_items For Each item_in_group In group_of_items
Haben Sie hier etwas
Weiter item_in_group

Die item_in_group hier gehört zu einer group_of_items (smart ist nicht ich). Was ich meine, ist, dass die als group_of_items verwendete Objekt hat eine Sammlung von Objekten sein. Sie können ein 'für jedes Element' Schleife auf einzelne Objekte nicht ausgeführt (damit Microsoft werfen die freundliche Laufzeitfehler 438 bei Ihnen!)

for-loop-vba-error-run-time-error-438

Die obige Schleife bewegt sich ein Element in einer Zeit, beginnend mit dem ersten Element in der Auflistung von Objekten. Sie können sich für diese besondere Syntax-Schleife verwenden, um entlang Blätter in einer Arbeitsmappe, Formen in einem Blatt, Pivot-Tabellen in einem Blatt oder einer Sammlung von Objekten in der Regel durchlaufen.

Nehmen wir das Beispiel, wie man die for-Schleife verwenden, um durch alle Arbeitsblätter in einer Arbeitsmappe durchlaufen:

1
2
3
4
5
Sub my_for_loop3 ()
ActiveWorkbook.Worksheets For Each sht In ActiveWorkbook.Worksheets
MsgBox sht.Name
Next sht
End Sub

Nun wollen wir sehen, wie wir die Schleife durch alle Pivot-Tabellen in einem Blatt:

1
2
3
4
5
Sub my_for_loop4 ()
ActiveSheet.PivotTables For Each pvt In ActiveSheet.PivotTables
MsgBox pvt.Name
Weiter pvt
End Sub

Ende For-Schleife, bevor Endbedingung

Wenn Sie die For-Schleife zu beenden, bevor das Ende erreicht oder Bedingung erfüllt ist, müssen, verwenden Sie einfach das Ende für in Verbindung mit der IF-Anweisung. Im Beispiel unten, verlassen wir die for-Schleife vorzeitig und vor dem Ende Bedingung erfüllt ist. Die beispielsweise unten angegeben, verlässt die Schleife, wenn a_counter einen Wert von 3 erreicht.

1
2
3
4
5
6
Sub my_for_loop5 ()
5 Für a_counter = 0 bis 5
MsgBox a_counter
Wenn (a_counter = 3), dann die Ausfahrt
Weiter a_counter
End Sub

Betroffene aus dem Direkt-oder eine bestimmte Schleife in einer For-Schleife

Es ist nicht ratsam, um aus einer for-Schleife und verschieben Sie dann wieder zurück. Werfen wir einen sehr gewundenen Beispiel:

1
2
3
4
5
6
7
8
9
10
11
12
13
Sub my_for_loop6 ()
Dim j As Integer
5 Für i = 0 bis 5
b:
a: Wenn (j = 3) Then GoTo ein:
j = i
Next i
a:
j = 4
GoTo b:

MsgBox ("Final Wert von j =" & j)
End Sub

Was wir versucht haben, hier zu tun ist ein Schritt von der for-Schleife in einer bestimmten Iteration (wenn j = 3). Was denken Sie, ist der letzte Wert von j im obigen Beispiel. 3? 5? Nun ... keiner von ihnen wirklich. Die Schleife wird endlos und würde bald zu Überlauf führen.

Allerdings ist es möglich, eine Schleife in der For-Schleife zu überspringen. Sie können den Zähler um 1 (oder eine andere Zahl) zu erhöhen und dass die for-Schleife, um alle Schleifen zwischen überspringen verursachen können. Hier ist ein Beispiel.

1
2
3
4
5
6
Sub my_for_loop7 ()
5 Für i = 0 bis 5
i = i + 1
MsgBox i
Next i
End Sub

Doch auch dies ist kein guter Programmierpraxis und kann zu Kopfschmerzen für die Leute später die Aufrechterhaltung der VBA-Code führen. Stattdessen prüfen, ob die besondere Situation ist, in eine FOR-Schleife übersprungen werden, versuchen Sie, eine IF-Funktion oder auch eine SELECT-CASE-Anweisung.


Excel Formula, Excel Chart, Excel Macro, Excel VBA, Pivot Table Excel, Excel Dashboard

Was denken Sie?


XHTML: Sie können diese Tags verwenden: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> < del datetime = ""> <em> <i> <q cite=""> <strike> <strong>


Kommentare und Trackbacks

  1. Peter Bode schrieb:

    Können Sie helfen? Ich versuche, eine Gruppe von Zellen in Excel mit For Each ... Next-Anweisung zu scannen. Ich habe einen Code, der im Grunde funktioniert (siehe unten). Mein Problem ist, dass ich zu wissen, welche Zelle innerhalb der Sammlung wird bearbeitet, wenn meine Testbedingung wahr ist. Nichts, was ich habe, um bis jetzt versucht hat funktioniert.

    Dim MyObject, MyCollection

    MyCollection = Range ("Projekte")
    For Each MyObject In MyCollection
    Wenn MyObject = "=" Dann
    "<<< >>>
    Exit For
    End If
    Nächste

  2. Ajay hat geschrieben:

    Peter können Sie dies versuchen:

    1
    2
    3
    4
    5
    6
    7
    8
    Sub try2 ()
    Range Dim rng As Range
    Set rng = Range ("Projekte")
    rng.Cells For Each cel In rng.Cells
    " & cel.Value MsgBox "Der Wert der Zelle in Zeile" & cel.Row & "und Spalte" & cel.Column & "ist" & cel.Value
    Wenn cel.Value = "" Then Exit
    Weiter cel
    End Sub
  3. Peter Bode schrieb:

    Dank Ajay. Ich habe so etwas wie das früher versucht und es hat nicht funktioniert. Ich habe auf jeden Fall versucht, Ihre Version von es und es funktioniert immer noch nicht. Ha, Ha, weil sie sagt, "cel" nicht definiert ist, habe ich eine Zeile "Dim Cel" hinzugefügt, und dass es behoben. Es funktioniert ein Genuss! Vielen, vielen, vielen Dank.

  4. Ajay hat geschrieben:

    Groß :-) By the way, hat der Code für mich mit Excel 2003 arbeiten Aus Neugier -. Welche Version hast du es mit testen?

  5. arpan schrieb:

    ich habe ein Makro, das sheet1 a1 mit Blatt 2 a1 vergleichen Jetzt möchte ich nur, um es für jeden und jede Zelle zu tun, bis es leere Zelle kommt getan

  6. Ajay hat geschrieben:

    @ Arpan etwas wie dies in der for-Schleife
    wenn cell.value = "" dann die Ausfahrt

  7. Kim schrieb:

    Können Sie helfen? Ich tryng auf AA wenige Spalten aufrufen und dann laufen die durch eine for-Schleife es so etwas wie dieses aussieht. Wenn ich type = answr (C29) in Zelle C29 der Fehler # NAME?

    Private Sub UserForm_Click ()
    Dim answr As String
    .. Set Zelle = Workbook (1) Arbeitsblätter (3) Range ("C4: C28")
    Für i = 4 bis 28
    1
    Wenn die Zelle (i). Text = 0 Then "ist Transmitter gebrochen" answr =
    Sonst
    Wenn die Zelle (i). Text> 80 Dann answr = "zu viel Druck"
    Sonst
    anwr = "Gut"

    End If
    Exit For
    End Sub

  8. Ajay hat geschrieben:

    @ Kim - Nicht sicher, wie Sie genau planen, um den Code zu verwenden, aber so etwas kann helfen:

    Private Sub UserForm_Click ()
    Dim j As Long
    j = 100
    Für i = 1 bis 10
    Wenn j <10 Da
    MsgBox "asdf"
    ElseIf j = 90 Then MsgBox "sdfasdf"
    Else: MsgBox "100"
    End If
    Next i
    End Sub

    Grüße,

  9. Randall schrieb:

    SOLLTE "Next sht" NOT "Next i" (Kappen, nur um emphise).
    Sub my_for_loop3 ()
    For Each sht In ActiveWorkbook.Worksheets
    MsgBox sht.Name
    Next i
    End Sub

  10. ttalgi schrieb:

    Ich tryting auf Spalte A bis H. colum Col Ein Kopier hat alle Werte vierten Zeilen. Ich möchte jeden Wert von A col in jeder 6. Reihe in H col Liste. Das ist mein Code, aber vielleicht meine Schleife ist nicht richtig, oder so etwas. Ich habe nicht Fehlermeldung erhalten, aber Col A verschwinden, aber keine Werte in H col. Was habe ich falsch gemacht? Sollte ich tun, Kopieren und Ziel?
    danke Ihnen so sehr,
    Sub-Säule ()
    Dim i As Integer, j As Integer
    Für i = 1 bis 29
    Für j = 1 bis 60
    Cells (i, 1). Value = Cells (j, 9). Wert
    i = i + 4
    j = j + 6
    Next j
    Next i
    End Sub

  11. Skazis schrieb:

    Nun, ich bin neu in VBA aber gearbeitet, um mich zu einer Iteration i Überspringen:
    Sub my_for_loop6 ()

    Für i = 0 bis 5

    If (i = 4), dann
    i = i + 1
    Sonst
    GoTo ein:
    End If
    a:
    MsgBox (i)
    Next i

    End Sub

  12. odisious schrieb:

    Ich werde aus Ihrem Beispiel lernen, danke

  13. Peter Gill schrieb:

    Hallo, ich brauche Hilfe!
    Ich versuche, einen einfachen Satz von Roboter zu programmieren. Ich habe die Zeitsteuerung der Roboter in (erhöht von 10s jeder Reihe) programmiert, und jetzt habe ich die Programmierung in, so dass für die Zellen enthält, 0 s bis 30s die benachbarte Spalte zeigt R (um einen roten Roboter angeben) und dann für die Zellen, die 40er und 50er Jahre die benachbarte Spalte zeigt G und dann in Schritten von 4 R geht es weiter, Hat 2 G usw. jemand eine Möglichkeit, ich könnte das tun??? Ich weiß, es ist ein Loop-Funktion, aber ich weiß nicht, wie die Loop-Funktion zu überspringen Reihen zu bekommen? Jede Hilfe wäre toll : D

  14. Jim hat geschrieben:

    Dies hat eine große Hilfe gewesen. Vielen Dank!

  15. Jay schrieb:

    Kann ich eine Schleife in einer Funktion in VBA?
    dh:
    Funktion mypi (tol)

    tun, während n> = tol
    n = -3 ^-k / 2 * k +1
    sum = sum + n
    k = k + 1
    Schleife
    Ende Funktion

  16. Elbacheur schrieb:

    @ Ajay
    Vielen vielen Dank für Ihre Lösung es hat mir wirklich geholfen =)))

  17. CATIA Makros geschrieben:

    Danke für die tolle For .. Next-Schleife Erklärungen. Ich bekomme es jetzt und kann es für andere Zwecke anzuwenden.

  18. Reed schrieb:

    Guten Tag. Ich habe den folgenden Code, um eine Vorlage aus einer Arbeitsmappe zu füllen und es funktioniert super für Reihe 2. Muss ich Schleife, damit er wiederholt dieses Makro für alle Datenzeilen in dem Blatt. Was muss ich tun?

    ChDir "C: \ PRT"
    Workbooks.Open Filename: = _
    "C: \ PRT-Template.xlsx"
    Windows-("Sizes.xlsm"). Activate
    Range ("A2"). Wählen
    Selection.Copy
    Windows-("PRT-Template.xlsx"). Activate
    Range ("F6: J6"). Wählen
    ActiveSheet.Paste
    Windows-("Sizes.xlsm"). Activate
    Range ("B2"). Wählen
    Application.CutCopyMode = False
    Selection.Copy
    Windows-("PRT-Template.xlsx"). Activate
    Range ("F7: Z7"). Wählen
    ActiveSheet.Paste
    Application.CutCopyMode = False
    Dim strName As String
    strName = Range ("F6"). Text
    ActiveSheet.SaveAs "C: \ PRT-" & strName

  19. Steven White schrieb:

    Nice work! Vielen Dank. Ich habe Ihre Website markiert und ich komme wieder ...

  1. Wie man eine Übersicht in Excel erstellen | da Lasche an schrieb:

    [...] Armaturenbrett, Kommentar ausgiebig und leicht verständlich schreiben Code. Sie können mehr über die VBA lernen und For Next For Each in Next-Schleife hier und tun, bis Schleife [...]

  2. Excel Makro | da Lasche an schrieb:

    [...] Kann, einige der früheren Artikeln, die sich mit dieser zu verweisen. Sie können mehr über VBA For-Schleife erfahren Sie hier. Für den Do-While-Schleife verwenden Sie sie [...]

  3. meine Programmierung | Pearltrees schrieb:

    [...] VBA For-Schleife - For Next und für jede Weiter | Excel & VBA - da Tab Is On 5 6 4 7 [...]

  4. . Helfen Sie mit VBA ... besseren Weg, um diese einfache Aufgabe zu tun, bitte schrieb:

    [...] Strukturen versuchen Sie Folgendes: XL: Schleifenstrukturen in Visual Basic für Applikationen VBA for-Schleife - For Next und für jede Weiter | Excel & VBA - Excel VBA Databison Loops. VBA Excel Training Lektion 10 Excel-VBA-Loops: Richtig / Effiziente Verwendungen von Excel [...]

  5. Excel-VBA-Stopp für jeden? | Askjis schrieb:

    [...] Die Schleife führt zum letzten Mal, wenn die beiden oben genannten Werte passen und dann stoppen. Beispiel für eine for-Schleife. . 1 2 3 4 5 6 7 Sub my_for_loop1 () ... Wie Verwenden Schleifenstrukturen in Visual Basic für Applikationen VBA For-Schleife - For Next und für jede Weiter | Excel & VBA ... - mehr [...]

Zeichnen

Halten Sie sich mit den neuesten Geschichten - Geliefert rechts in Ihren Posteingang
Feedburner

Übersetzen

English flagChinese (Simplified) flagPortuguese flagGerman flagFrench flagSpanish flagJapanese flagArabic flagDutch flagHindi flagPolish flagSwedish flagFilipino flagHebrew flagIndonesian flagUkrainian flagThai flagTurkish flag
treeemap Software für Excel