VBA-For-Schleife - 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 Schleifen 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 an jedem beliebigen Punkt beenden wir die Abfahrt 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 es auf einen Wert gleich am Anfang der Schleife um 1 bei jedem Schleifen bis start_counter und dann zu erhöhen (oder verringern) es. Die Schleife wird bis zu dem Zeitpunkt wird der Wert des a_counter gleich end_counter wird auszuführen. Die Schleife wird für die Zeit, in der beide zuletzt die 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 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 zurück 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 Schleife war" & a_counter
End Sub

Der Endwert des a_counter in dieser Schleife 1 ist.

Wie Sie sehen können, können wir den Schritt n-Befehl verwenden, um sicherzustellen, dass die for-Schleife arbeitet entweder vorwärts oder rückwärts. Standardmäßig ist die 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 Richtung 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,
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 auf Sie!)

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 dieser besonderen 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 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

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 gegeben, 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
ein:
j = 4
GoTo b:

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

Was wir versucht haben, hier 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 zum Ü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 die 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, die 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
    Ende 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 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! Vielen, vielen, vielen Dank.

  4. Ajay hat geschrieben:

    Groß :-) 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 möchte ich 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 dann diejenigen, die durch eine for-Schleife ist es 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 Zelle = 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 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 hat geschrieben:

    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 colum H. Col A kopiert hat Werte jeder 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 wusste nicht Fehlermeldung 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 das funktionierte für mich, um eine 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
    ein:
    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. Habe ich das Timing 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, die 0s bis 30s die benachbarte Spalte zeigt R (eine rote 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 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. Vielen Dank !!!

  15. Jay hat geschrieben:

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

    Guten Nachmittag. Ich habe den folgenden Code, um eine Vorlage aus einer Arbeitsmappe zu füllen und es funktioniert super für Zeile 2. Ich muss Schleifen, 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. Scott schrieb:

    Ich habe eine für die nächste Schleife, die ich will, um eine Variable zu nehmen und es in 11 Zellen auf meinem Arbeitsblatt. Ich kann es nicht, dass es funktioniert. Die Variable "MyDate" erfasst und auf die erste Zelle gebracht, aber ich brauche es in 12 concecutive Zellen in der ersten Spalte.

    Eine Kopie des Codes ist unten. Ich habe mehrere andere Versionen der es ausprobiert und nichts zeigt sich auf meine Tabelle mit Ausnahme des ersten Termin in der ersten Zelle.

    Sub Transfer_Date ()

    Dim iRow As Long
    Dim MyArray (1 bis 12) As Date
    Dim TheDate As Date
    Set ws = Arbeitsblatt ("HydraulicData")

    'Transfers Datum in erste leere Zeile der Tabellenkalkulation

    Zellen (iRow, 1) .Value = TheDate

    Für i = 1 bis 11

    ThisWorkbook.Activate

    ThisWorkbook.ActiveSheet.range (A (i)) = TheDate

    EndFor

    EndSub

  22. Scott schrieb:

    Ich habe eine für die nächste Schleife, die ich will, um eine Variable zu nehmen und es in 11 Zellen auf meinem Arbeitsblatt. Ich kann es nicht, dass es funktioniert. Die Variable "MyDate" erfasst und auf die erste Zelle gebracht, aber ich brauche es in 12 concecutive Zellen in der ersten Spalte.

    Eine Kopie der Code ist unten. Ich habe mehrere andere Versionen der es ausprobiert und nichts zeigt sich auf meine Tabelle mit Ausnahme des ersten Termin in der ersten Zelle.

    "Sub Transfer_Date ()

    "Dim iRow As Long
    "Dim MyArray (1 bis 12) As Date
    "Dim TheDate As Date
    'Set ws = Arbeitsblatt ("HydraulicData")

    'Transfers Datum in erste leere Zeile der Tabellenkalkulation

    "Zellen (iRow, 1) .Value = TheDate

    "Für i = 1 bis 11

    'ThisWorkbook.Activate

    'ThisWorkbook.ActiveSheet.range (A (i)) = TheDate

    'EndFor

    EndSub

  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 Do Until-Schleife [...]

  2. Excel Macro | da Registerkarte On schrieb:

    [...] Können einige der früheren Artikeln, die sich mit diesen 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 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 sowohl die 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 [. ..]

Abonnieren

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

LETZTE BEITRÄGE