VBA For-Schleife - For Next und für jede in der nächsten




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 Weiter. Die for-Schleife wird normalerweise verwendet, um nacheinander durch eine Liste der Elemente oder Zahlen zu bewegen. Um die for-Schleife zu einem bestimmten Zeitpunkt 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 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 haben dies auf einen Wert gleich zu Beginn der Schleife um 1 während jeder Schleife bis start_counter und dann erhöhen (oder verringern) es. Die Schleife wird bis in die Zeit der Wert des 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 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 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 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 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 Befehls verwenden, um sicherzustellen, dass die for-Schleife arbeitet entweder vorwärts oder rückwärts. Standardmäßig ist der Step-Wert ist nach vorne ein, aber es kann auf eine Reihe von mehr als 1 gesetzt werden, um vorwärts zu springen Schleifen oder negativ für die for-Schleife, um in umgekehrter arbeiten.

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 einem group_of_items (smart ist nicht ich). Was ich meine ist, dass die als group_of_items verwendet Objekt muss 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 ein Element zu einem Zeitpunkt, beginnend mit dem ersten Eintrag in der Sammlung von Objekten. Sie können für Schleifensyntax diese besondere verwenden, um 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 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
Weiter sht
End Sub

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

End For-Schleife, bevor Endbedingung

Wenn Sie brauchen, um die For-Schleife zu beenden, bevor die Endbedingung erreicht oder erfüllt ist, verwenden Sie einfach das Ende für in Verbindung mit der IF-Anweisung. Im Beispiel unten angegeben, verlassen wir die for-Schleife vorzeitig und vor dem Ende Bedingung erfüllt ist. Die beispielsweise unter bestimmten, 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 einer bestimmten Schleife in einer For-Schleife

Es ist nicht ratsam, auszuziehen eine 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

Was wir versucht haben, hier zu tun ist ein Umzug 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 führt endlos und würde bald zu Ü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 Zahl) zu erhöhen und die dazu führen können die for-Schleife, um alle Schleifen dazwischen ü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 die Aufrechterhaltung der VBA-Code führen. Stattdessen prüfen, ob die besondere Situation ist es, in einer FOR-Schleife übersprungen werden, versuchen Sie es mit einer Wenn-Funktion oder sogar 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 wissen muss, 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 For
    Weiter cel
    End Sub
  3. Peter Bode schrieb:

    Dank Ajay. Ich habe so etwas wie diese frühere 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! Viele, 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 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 schrieb:

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

    Private Sub UserForm_Click ()
    Dim answr As String
    Set Zelle = Workbook (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 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" (Kappen nur 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 colum H. Col A kopieren weist Werte jeder 4. Reihen. Ich möchte jeden Wert von A col in jeder sechsten Zeile in H col aufzulisten. 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 kopieren 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
    Weiter 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 in (erhöht sich um 10s jede Reihe) programmiert und jetzt habe ich die Programmierung in, so dass für die Zellen enthält 0s bis 30s die benachbarte Spalte zeigt R (um einen roten Roboter angeben) und dann für die Zellen, die 40er und 50er Jahren die benachbarte 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 eine Loop-Funktion, aber ich weiß nicht, wie die Loop-Funktion zum Überspringen Reihen zu bekommen? Jede Hilfe wäre toll : D

  14. Jim hat geschrieben:

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

  15. Jay hat geschrieben:

    Kann ich eine Schleife innerhalb 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
    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 es auf andere Verwendungen.

  18. Reed schrieb:

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

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

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

    [...] Armaturenbrett, kommentieren ü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 Lasche an schrieb:

    [...] Kann, einige der früheren Artikeln, die sich mit diesem 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 Weiter | Excel & VBA - da Lasche an 5 6 4 7 [...]

  4. Hilfe mit VBA ... besseren Weg, um 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 jede Weiter | Excel & VBA - Databison Excel VBA 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 für eine 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 Weiter | 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