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




Tumblr StumbleUpon Reddit LinkedIn AIM Digg Evernote WhatsApp MySpace Kindle Es

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 auf Weiter. Die For-Schleife wird in der Regel verwendet werden, um der Reihe nach durch eine Liste von Elementen oder Zahlen zu bewegen. Um die for-Schleife zu einem bestimmten Zeitpunkt zu beenden wir die Ausfahrt nach Anweisung verwenden können. Werfen wir einen genaueren Blick auf jede dieser Schleifen.

for-loop-in-vba

VBA For ... Next-Schleife

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

1
2
3
end_counter Für a_counter = start_counter Um end_counter
'Hier etwas tun
Nächste a_counter

Was wir hier tun, ist im wesentlichen eine Schleife, die eine variable a_counter als "Zeitnehmer" der Schleife verwendet. Wir stellen Sie ihn auf einen Wert gleich zu Beginn der Schleife um 1 bei jeder Schleife bis start_counter und dann zu erhöhen (oder verringern) es. 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 entsprechen, und dann stoppen.

Beispiel einer for-Schleife

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

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

Der Endwert der der a_counter in der obigen Schleife 11.

VBA-For-Schleife in umge mit STEP Instruction

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 rückwärts zu haben. Hier ist ein Beispiel für die Schleife umgekehrt:

1
2
3
4
5
6
7
Sub my_for_loop2 ()
1 Step -1 Für a_counter = 10-1 Schritt -1
j = a_counter
Nächste a_counter

was " & a_counter MsgBox "Der Wert des Zählers in der letzten Runde 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 Wert Schritt vorwärts ist 1, kann aber zu einer Reihe mehr als 1 festgelegt werden, um vorwärts zu springen Schleifen oder negativ für die for-Schleife, um rückwärts zu arbeiten.

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

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

1
2
3
group_of_items For Each item_in_group In group_of_items
Haben hier etwas
Nächste item_in_group

Die item_in_group hier gehört zu einer group_of_items (smart ist nicht I). Was ich meine ist, dass die als group_of_items verwendet Objekt hat eine Sammlung von Objekten sein. Sie können eine "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 Sammlung von Objekten. Sie können für Schleifensyntax diese besondere können Sie entlang Blatt in einer Arbeitsmappe durchlaufen, Formen in einem Blatt, Pivot-Tabellen in einem Blatt oder einer Sammlung von Objekten im Allgemeinen.

Nehmen wir das Beispiel, wie Sie 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
Nächste sht
End Sub

Nun wollen wir sehen, wie wir können, 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
Nächste pvt
End Sub

End For-Schleife, bevor Endbedingung

Wenn Sie die For-Schleife zu beenden, bevor das Ende Zustand erreicht oder erfüllt ist, verwenden Sie einfach das Ende für in Verbindung mit dem IF-Anweisung. Im Beispiel unten, wir verlassen 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
Nächste a_counter
End Sub

Betroffene aus dem oder Überspringen einer bestimmten Schleife in einer For-Schleife

Es ist nicht ratsam, auszuziehen einer for-Schleife und dann wieder zurück zu bewegen wieder. 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

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

Jedoch ist es möglich, eine Schleife in der FOR-Schleife springen. Sie können den Zähler um 1 (oder eine andere Nummer) zu erhöhen und die dazu führen können die for-Schleife, um alle Schleifen in zwischen zu überspringen. 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 nicht eine gute Codierung der Praxis und kann zu Kopfschmerzen für die Leute später Aufrechterhaltung der VBA-Code führen. Stattdessen prüfen, ob die besondere Situation ist es, in einer FOR-Schleife übersprungen werden, versuchen Sie, einen IF-Funktion oder auch eine SELECT CASE-Anweisung.

Tumblr StumbleUpon Reddit LinkedIn AIM Digg Evernote WhatsApp MySpace Kindle Es

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

Was Denken Sie?


XHTML: Sie können diese Tags benutzen: <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 Zellen in der Kollektion 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
    Als Nächstes

  2. Ajay hat folgendes geschrieben:

    Peter Sie können 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 der Zeile" & cel.Row & "und Spalte" & cel.Column & "ist" & cel.Value
    Wenn cel.Value = "" Then Exit For
    Nächste cel
    End Sub
  3. Peter Bode schrieb:

    Dank Ajay. Ich habe so etwas wie dieser früher versucht und es hat nicht funktioniert. Ich habe jedenfalls 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" aufgenommen und fixiert es. Es funktioniert ein Genuss! Vielen, vielen, vielen Dank.

  4. Ajay hat folgendes geschrieben:

    Na Toll :-) By the way, hat den Code für mich mit Excel 2003 arbeiten Aus Neugier - welche Version hast du es mit zu testen?

  5. arpan schrieb:

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

  6. Ajay hat folgendes geschrieben:

    arpan etwas wie dies in der for-Schleife verwenden
    wenn Cell.Value = "" dann die Ausfahrt

  7. Kim schrieb:

    Können Sie helfen? Ich tryng zu aa paar Spalten nennen und führen Sie dann die durch eine for-Schleife ist ungefähr so ​​aussieht. Als ich type = answr (C29) in Zelle C29 der Fehler #NAME?

    Private Sub UserForm_Click ()
    Dim answr As String
    Set cell = Arbeitsbuch (1) .Worksheets (3) .Range ("C4: C28")
    Für i = 4 bis 28
    1
    Wenn die Zelle (i) .Text = 0 Then "ist gebrochen Transmitter" 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 folgendes 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 Dann
    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" (Caps, 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 A kopiert hat Werte alle 4 Zeilen. Ich möchte jeden Wert von A col in jeder 6. R. in H col aufzulisten. Dies ist mein Code, aber vielleicht meine Schleife ist nicht richtig, oder so etwas. Ich habe nicht Fehlermeldung, aber Col A verschwinden, aber keine Werte in H col. Was habe ich falsch gemacht? Sollte ich Copy verwenden und Ziel?
    vielen dank,
    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) .Value
    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:

    i wird von 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 (erhöht sich um 10 Sekunden in jeder Zeile) programmiert und jetzt habe ich die Programmierung in, so dass für die Zellen, die 0s bis 30s der benachbarten Spalte zeigt R (einen roten Roboter zeigen) und dann für die Zellen, die 40er und 50er Jahren die angrenzenden Spalte zeigt G und dann in Schritten von 4 R geht es weiter, 2 G usw. Kennt jemand eine Möglichkeit, ich könnte dies zu 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 schrieb:

    Dies hat eine große Hilfe gewesen. Danke Shon !!!

  15. Jay schrieb:

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

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

  16. Elbacheur schrieb:

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

  17. CATIA Makros schrieb:

    Danke für die tollen FOR..NEXT Schleife Erklärungen. Ich bekomme es jetzt und kann 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 Zeile 2. Ich muss Schleife, damit er dieses Makro für alle Datenzeilen in der Platte wiederholt. Was muss ich tun?

    ChDir "C: \ PRT"
    Workbooks.Open Dateiname: = _
    "C: \ PRT-Template.xlsx"
    Fenster ("Sizes.xlsm"). Aktivieren
    Range ("A2"). Wählen Sie
    Selection.Copy
    Fenster ("PRT-Template.xlsx"). Aktivieren
    Range ("F6: J6") wählen.
    ActiveSheet.Paste
    Fenster ("Sizes.xlsm"). Aktivieren
    Range ("B2"). Wählen Sie
    Application.CutCopyMode = False
    Selection.Copy
    Fenster ("PRT-Template.xlsx"). Aktivieren
    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 ...

  20. james schrieb:

    können Sie mir helfen Jungs zu for-Schleife

    Ich möchte den Wert aller a1 multiplizieren

  21. Nike Air Max 2009 schrieb:

    Ikebana Internationale Dallas Kapitel feierte die Feiertage mit einem Mittagessen, das a ?? Gehackte vorge ?? Asiatische inspirierte ?? Wettbewerb. Die Gäste in Teams aufgeteilt, um ein Gericht mit gehackten Zutaten gefüllt vorzubereiten. Chef Sharon Van Meter überwachte den Wettbewerb auf ihr Geschäft, 3015 am Trinity Groves.

  22. Nike Hyperdunk 2011 schrieb:

    Nya Kvinnliga f? Rfattare. Den australiska f? Rfattaren Kate Mortons b? Cker har s? Lt i hundratusental i Norge och nu er? Vrar Lucina Riley marknaden. Vad? R det som g? R att l? Sarna gillar DM s? mycket?

  23. Womens Nike Air Max 2014 schrieb:

    FRAU. BRÄUNEN: David, ich, ich, ich denke, wir müssen all diese Dinge für die Zukunft zu verstehen. Aber ich denke, es ist wichtig zu verstehen, dass diese Brunnen sind seit Jahrzehnten gebohrt. Es haben sich diese Arten von Unfällen. Doch in Zukunft müssen wir ändern, was wir tun, weil es ein Unfall war, und wir müssen aus diesem Unfall lernen. Und, wissen Sie, in der Zwischenzeit haben wir unten alle Tiefsee-Bohrungen im Golf von Mexiko geschlossen, bis wir eine Antwort an, eine, wie können Sie sicherstellen, dass diese Operationen sind sicher, dass es Entlassungen im Ort? Und, um Ihren Standpunkt zum anderen, was passiert, wenn diese Entlassungen nicht funktionieren? Wir müssen diese beiden zu verstehen, bevor wir weitergehen, und wir werden diese beiden zu verstehen, bevor wir uns zu gehen.

  24. Frauen Air Max BW schrieb:

    "Tunge lasten pieniin suihin kaikkea! Kyll oppivat er arvostamaan kaikkea ruokaa pikku hiljaa. Ei pid pakottaa sYmn loppuun, mutta kun lasten Grube kerran maistaa kaikkea, Michael Kors, syntyy mielenkiinto ruokaa kohtaan. Kyll pienetkin Ihmiset pitvt hyvst ruuasta. "

  25. Nike Air Max 2014 Hombre schrieb:

    "Während der Kampagne versprach ich den Eltern, dass dies ein Problem, ich würde ernsthaft erwägen, war," eine übernächtigt Jeffries, 41, sagte, nach dem Händeschütteln mit Noten von Senioren in Clinton Hill.

  26. Air Lebron Dia schrieb:

    tuotanto Yle Lasten ja nuorten nettitiimi

  1. Wie man ein Armaturenbrett in Excel erstellen | da Lasche an schrieb:

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

  2. Excel Macro | da Lasche an schrieb:

    [...] Kann, einige der vorherigen Artikel über diese beziehen. Sie können mehr über VBA-For-Schleife erfahren Sie hier. Für die Do While-Schleife verwenden Sie sie [...]

  3. meine Programmierung | Pearltrees schrieb:

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

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

    [...] Strukturen versuchen Sie Folgendes: XL: wie Looping Strukturen in Visual Basic für Applikationen VBA for-Schleife - For Next und für jede Nächste | Excel & VBA - Excel VBA Databison Loops. Excel Training VBA Lektion 10 Excel-VBA-Loops: Richtig / Effiziente Nutzung des Excel [...]

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

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

Zeichnen

Schritt halten mit den neuesten Geschichten - direkt in Ihre Inbox
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