VBA für Loop - For Next und für jedes im Next




Tumblr StumbleUpon Reddit LinkedIn AIM Digg Evernote WhatsApp Mein Platz Kindle Es

Die For-Schleife in VBA ist eine der am häufigsten verwendeten Loops in VBA. Die for-Schleife hat zwei Formen: Für Next und für jedes im Next. 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
'Sie 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 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 aufhören.

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
Weiter 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 Schritt-Anleitung

Es ist nicht notwendig, dass 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
Weiter 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 wird der Step-Wert ist nach vorne 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 in umgekehrter Arbeit.

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
Weiter 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 for-Schleife Syntax verwenden, um diese besondere zusammen 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 über 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
Weiter sht
End Sub

Nun wollen wir sehen, wie wir 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

For-Schleife zu beenden, 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 angegeben, 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
Weiter a_counter
End Sub

Betroffene aus dem oder überspringen eine bestimmte Schleife in einer For-Schleife

Es ist nicht ratsam, um aus 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: Falls (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 aus der for-Schleife in einer bestimmten Iteration (wenn j = 3). Was denken Sie, ist der letzte Wert von j in dem obigen Beispiel. 3? 5? Nun ... keiner von ihnen wirklich. Die Schleife wird endlos und 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 Nummer) zu erhöhen, und dass kann dazu führen, die for-Schleife, um alle Schleifen in zwischen zu überspringen. Hier 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 können 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 Mein Platz Kindle Es

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 hat geschrieben:

    Kannst du 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 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ächster

  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 der Zeile" & cel.Row & "und Spalte" & cel.Column & "ist" & cel.Value
    Wenn cel.Value = "" Then Exit For
    Weiter cel
    End Sub
  3. Peter Bode hat geschrieben:

    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" hinzugefügt, und dass es behoben. Es funktioniert ein Genuss! Vielen, vielen, vielen Dank.

  4. Ajay hat geschrieben:

    Großartig :-) 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 geschrieben:

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

  7. Kim hat geschrieben:

    Kannst du helfen? Ich tryng auf AA wenige Spalten nennen und führen Sie diejenigen, die durch eine for-Schleife ist ungefähr so ​​aussieht. Wenn ich schreibe = answr (C29) in die 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) = 0 Then .Text "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 geschrieben:

    Kim - Nicht sicher, wie Sie genau planen, um den Code zu verwenden, aber so etwas wie dieses 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 zu erhalten, aber Col A verschwinden, aber keine Werte in H col. Was hab 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
    Zellen (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, ich danke Ihnen

  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 sich um 10 s in jeder Zeile) programmiert und jetzt habe ich die Programmierung in, so dass für die Zellen enthält, 0 s bis 30 s der benachbarten Spalte zeigt R (eine rote Roboter zeigen) und dann für die Zellen, die 40er und 50er Jahren die benachbarte Spalte zeigt G und dann in Schritten von 4 R ist es weiterhin, 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 hat geschrieben:

    Dies hat eine große Hilfe gewesen. Thanks !!!

  15. Jay hat geschrieben:

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

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

  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 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 dem Blatt 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:

    Gute Arbeit! 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. L3g4to schrieb:

    Schade für und Do While-Schleifen nicht ein einfaches Weiter Aussage wie andere Sprachen unterstützt. Ich hasse es, mit Hilfe der GOTO-Anweisung, die fehlerhaft ist.

    Hier meine eigenen Lernprogramm auf Excel Loops:
    http://www.analystcave.com/tutorials/excel-vba-tutorial/6/#Excel_VBA_Tutorial_Loops

  1. Wie man ein Armaturenbrett in Excel erstellen | da Registerkarte On schrieb:

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

  2. Excel Macro | da Registerkarte On 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:

    [...] Für VBA Loop - For Next und für jedes im Next | Excel & VBA - da Tab wird in 5 6 4 7 [...]

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

    [...] Strukturen versuchen Sie Folgendes: XL: wie Schleifenstrukturen in Visual Basic für Applikationen VBA for-Schleife - For Next und für jedes im Next | 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 aufhören. 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 jedes im Next | Excel & VBA ... - mehr dazu [...]

  6. Schreiben Sie eine Powerpoint-Add-in VBA - auf die harte Tour | secretweaponsdigital schrieb:

    [...] Art von Schleifen in VBA: http://www.databison.com/vba-for-loop-for-next-and-for-each-in-next/ Teilen Sie diese: TwitterFacebookGoogleLike dieser: Wie [. ..]

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