In diesem Artikel haben wir verschiedene Arten von Schleifen behandelt, die in VBA verwendet werden, und wie man sie verwendet, um dieselbe Aufgabe auf unterschiedliche Weise zu erledigen.
Warum Schleifen?
Looping ist eine der mächtigsten Programmiertechniken, die in vielen Programmiersprachen verwendet wird. Schleifen wird verwendet, um einen Codeblock für die erforderliche Anzahl von Malen zu wiederholen oder bis eine gegebene Bedingung als wahr ausgewertet wird oder ein bestimmter Wert erreicht wird, wonach der nächste Codeblock ausgeführt wird.
Der Zweck einer Excel-VBA-Schleife besteht darin, Excel dazu zu bringen, einen Codeabschnitt eine bestimmte Anzahl von Malen zu wiederholen. Man kann angeben, wie oft ein Code als feste Zahl wiederholt werden muss (z. B. 10 Mal) oder als Variable (z. B. so oft wie Datenzeilen vorhanden sind).
Excel-Schleifen können auf unterschiedliche Weise erstellt werden, um unterschiedlichen Umständen gerecht zu werden. Oft können dieselben Ergebnisse auf unterschiedliche Weise erzielt werden, um Ihren persönlichen Vorlieben zu entsprechen.
In Excel VBA stehen drei verschiedene Arten von Schleifen zur Verfügung:
1. DO BIS Schleife
2. DO WHILE Loop
3. FOR-Schleife
1. DO BIS Schleife
Die DO UNTIL-Schleife wird verwendet, um einen Codeblock auf unbestimmte Zeit zu wiederholen, bis die angegebene Bedingung auf True gesetzt ist. Die Bedingung kann entweder am Anfang oder am Ende der Schleife überprüft werden. Die Anweisung DO UNTIL… LOOP testet die Bedingung am Anfang, während die Anweisung DO… LOOP UNTIL die Bedingung am Ende der Schleife testet.
Syntax der DO UNTIL… LOOP-Anweisung
Mach bis [Bedingung]
[Block des zu wiederholenden Codes]
Schleife
Syntax der Anweisung DO… LOOP UNTIL
Tun
[Block des zu wiederholenden Codes]
Schleife bis [Bedingung]
Wir haben die DO… UNTIL-Schleife mit einem Beispiel erklärt. Die Makros Loop1 und Loop2 werden verwendet, um den Durchschnitt der Zahlen in Spalte A und Spalte B mithilfe der DO… UNTIL-Schleife zu berechnen.
Probendaten liegen im Bereich A15:B27 vor. Spalte A enthält die Ergebnisse von Runde 1 und Spalte B enthält die Ergebnisse von Runde 2. Wir möchten die Durchschnittswerte der Ergebnisse in Runde 1 und Runde 2 in Spalte C berechnen.
Im Loop1-Makro haben wir "FormulaR1C1" verwendet, um die Durchschnittsformel in die aktive Zelle einzufügen. Die Bedingungsanweisung in der DO UNTIL-Schleife wird am Ende der Schleife überprüft.
Im Loop2-Makro haben wir "WorksheetFunction.Average" verwendet, um den Durchschnittswert in die aktive Zelle einzufügen. Auch in diesem Makro wird die Bedingungsanweisung am Ende der Schleife überprüft.
Der einzige Unterschied zwischen Loop1 und Loop2 Makro besteht darin, dass Loop1 die Durchschnittsformel einfügt, während Loop2 den Durchschnitt berechnet und dann den Durchschnittswert in die aktive Zelle einfügt.
2. DO WHILE Loop
Die DO WHILE-Schleife wird verwendet, um einen Codeblock unbegrenzt oft zu wiederholen, während die angegebene Bedingung weiterhin True ist und stoppt, wenn die Bedingung False zurückgibt. Die Bedingung kann entweder am Anfang oder am Ende der Schleife überprüft werden. Die Anweisung DO WHILE… LOOP testet die Bedingung am Anfang, während die Anweisung DO… LOOP WHILE die Bedingung am Ende der Schleife testet. Die Anweisung DO… LOOP WHILE wird verwendet, wenn die Schleife den Codeblock mindestens einmal ausführen soll, bevor die Bedingung überprüft wird.
Syntax der DO WHILE… LOOP-Anweisung
Während [Bedingung]
[Block des zu wiederholenden Codes]
Schleife
Syntax der DO… LOOP WHILE-Anweisung
Tun
[Block des zu wiederholenden Codes]
Schleife während [Bedingung]
In diesem Beispiel werden die Makros Loop3 und Loop4 verwendet, um Durchschnittswerte für Werte in den Zellen von Spalte A und Spalte B zu berechnen. Beide Makros arbeiten mit denselben Beispieldaten wie die Makros Loop1 und Loop2. Beide verwenden die DO WHILE-Anweisung, um den Bereich zu durchlaufen, der die Daten enthält.
Der einzige Unterschied zwischen Loop3- und Loop4-Makros besteht darin, dass es sich um unterschiedliche Arten handelt, Bedingungen der DO WHILE-Schleife darzustellen.
Da Loop3- und Loop4-Makros dieselben Eingabedaten verwenden und sogar dieselben Funktionen wie Loop1-Makros ausführen, ist die zurückgegebene Ausgabe auch dieselbe wie beim Loop1-Makro.
3. FOR-Schleife
Die For-Schleife wird verwendet, um einen Codeblock für eine bestimmte Anzahl von Malen zu wiederholen.
Syntax der FOR-Schleife
Für count_variable = start_value Bis end_value
[Codeblock]
Nächste count_variable
Das Loop5-Makro zeigt, wie Sie die FOR-Schleife verwenden, um den Durchschnitt zu berechnen. Es verwendet auch dieselben Beispieldaten, die von anderen Makros verwendet werden. Wir haben 15 als Startwert verwendet, da die Beispieldaten bei 15 . beginnenNS Reihe. Wir haben Range("A" & Cells.Rows.Count).End(xlUp).Row verwendet, um die letzte Zeile mit Daten zu finden. Die FOR-Schleife wird (lastcell-15) mehrmals wiederholt.
Die Ausgabe, die nach dem Ausführen des Loop5-Makros zurückgegeben wird, ist dieselbe wie beim Loop1-Makro.
Das Loop6-Makro wird erstellt, um den Durchschnitt zu berechnen, nur wenn die aktive Zelle, die die Durchschnittsfunktion enthält, leer ist, bevor das Makro ausgeführt wird.
Beispieldaten für dieses Makro sind im Bereich E15 bis G27 vorhanden.
Wir haben DO… LOOP WHILE verwendet, um den definierten Bereich zu durchlaufen. Die IF-Anweisung wird verwendet, um zu überprüfen, ob die Zelle, in die die Funktion eingefügt wird, einen Wert enthält. Dieses Makro fügt nur dann eine Durchschnittsfunktion in die Zelle ein, wenn sie leer ist.
Das Makro Loop7 wird auch verwendet, um den Durchschnitt zu berechnen. Es sucht nach Werten in der Hilfsspalte, bevor ausgewertet wird, ob eine erneute Schleife durchgeführt werden soll. Es prüft auch, ob der in der Mittelwertfunktion zu verwendende Zellbezug leer ist.
Die für das Loop7-Makro verwendeten Beispieldaten liegen im Bereich J15:M27.
Spalte M wird als Hilfsspalte verwendet. Dieses Makro fügt nur dann eine Durchschnittsfunktion ein, wenn eine Zelle in Spalte M nicht leer ist. Dieses Makro überprüft, ob eine Zelle leer sein sollte, bevor eine Durchschnittsfunktion darin eingefügt wird. Es wird keine Durchschnittsfunktion eingefügt, wenn die Zelle, auf die in der Durchschnittsfunktion verwiesen wird, leer ist.
Bitte folgen Sie unten für den Code
Option Explicit Sub Loop1() 'Durchschnitt berechnen 'Do Until Schleife wird wiederholt, bis die Zelle in der vorherigen Spalte der aktiven Zelle leer ist Range("C15").Select Do 'Durchschnittsfunktion dem Wert in den Zellen der vorherigen zwei aufeinanderfolgenden Spalten zuweisen ActiveCell. FormulaR1C1 = "=Average(RC[-1],RC[-2])" 'Zu Zelle in der nächsten Zeile verschieben ActiveCell.Offset(1, 0).Select 'Überprüfen, ob der Wert in der Zelle der vorherigen Spalte leer ist 'Do Until Schleife wird wiederholt, bis die Bedingungsanweisung True zurückgibt Schleife bis IsEmpty(ActiveCell.Offset(0, -1)) Range("A15").Select End Sub Sub Loop2() 'Durchschnitt berechnen 'Do Until Schleife wiederholt, bis die Zelle in der vorherigen ist Spalte der aktiven Zelle ist leer 'Dieses Makro ist dem Makro Loop1 ähnlich, nur der Durchschnitt kann anders berechnet werden Range("C15").Select Do 'Worsheet.Average-Funktion wird zur Berechnung des Durchschnitts verwendet ActiveCell.Value = WorksheetFunction.Average( ActiveCell.Offset(0, -1).Value, _ ActiveCell.Offset(0, -2).Value) ActiveCell.Offset(1, 0).Select Loop Until IsEmpty(ActiveCel l.Offset(0, -1)) Range("A15").Select End Sub Sub Loop3() 'Durchschnitt berechnen 'Do While-Schleife wird ausgeführt, bis die Zelle in der vorherigen Spalte der aktiven Zelle leer ist Range("C15") .Wählen Sie 'Überprüfen, ob der Wert in der Zelle der vorherigen Spalte leer ist 'Do While-Schleife wird wiederholt, bis die Bedingungsanweisung True ist zwei aufeinanderfolgende Spalten ActiveCell.FormulaR1C1 = "=Average(RC[-1],RC[-2])" 'Zu Zelle in der nächsten Zeile verschieben ActiveCell.Offset(1, 0).Select Loop Range("A15").Select End Sub Sub Loop4() 'Durchschnitt berechnen 'Do While-Schleife wird ausgeführt, bis die Zelle in der vorherigen Spalte der aktiven Zelle leer ist 'Dieses Makro ähnelt dem Makro Loop3, die einzige Möglichkeit, die Bedingung anzuwenden, ist eine andere Range("C15").Select Do While Not IsEmpty(ActiveCell.Offset(0, -1)) ActiveCell.FormulaR1C1 = "=Average(RC[-1],RC[-2])" ActiveCell.Offset(1, 0).Select Loop Range(" A15").Select End Sub Sub Loop5() 'FOR Schleife wiederholt sich für eine feste Anzahl Er wird durch die Anzahl der Zeilen bestimmt Dim i, lastcell As Long 'Finde die letzte Zeile mit Daten in Spalte A lastcell = Range("A" & Cells.Rows.Count).End(xlUp).Row Range("C15 ").Select 'i-Variable wird der Wert 15 zugewiesen, da unsere Beispieldaten ab der 15. Zeile beginnen 'FOR-Schleife wird x für i = 15 Schleife zur letzten Zelle ActiveCell.FormulaR1C1 = "=Average(RC[-1],RC[-2 ])" ActiveCell.Offset(1, 0).Select Next i Range("A15").Select End Sub Sub Loop6() 'Durchschnitt berechnen 'Do Until Schleife wird wiederholt, bis die Zelle in der vorherigen Spalte der aktiven Zelle leer ist ' Es wird kein Durchschnitt berechnet, wenn sich bereits etwas in der Zelle Range("G15") befindet.Select Do If IsEmpty(ActiveCell) Then ActiveCell.FormulaR1C1 = "=Average(RC[-1],RC[-2])" End If ActiveCell.Offset(1, 0).Select Loop Until IsEmpty(ActiveCell.Offset(0, -1)) Range("E15").Select End Sub Sub Loop7() 'Do Until Schleife läuft so lange wie vorhanden etwas in der Zelle in der nächsten Spalte 'Es wird kein Durchschnitt berechnet, wenn bereits etwas im aktiven c vorhanden ist ell 'Auch wenn keine Daten in Zellen vorhanden sind, die innerhalb der Durchschnittsfunktion verwendet werden (um #DIV/0-Fehler zu vermeiden). 'Durchschnittsbereich berechnen("L15").Wählen Sie Do If IsEmpty(ActiveCell) Then If IsEmpty(ActiveCell.Offset(0, -1)) And IsEmpty(ActiveCell.Offset(0, -2)) Then ActiveCell.Value = " " Else ActiveCell.FormulaR1C1 = "=Average(RC[-1],RC[-2])" End If End If ActiveCell.Offset(1, 0).Select Loop Until IsEmpty(ActiveCell.Offset(0, 1)) Range("J15").Select End Sub
Wenn Ihnen dieser Blog gefallen hat, teilen Sie ihn mit Ihren Freunden auf Facebook. Außerdem können Sie uns auf Twitter und Facebook folgen.
Wir würden uns freuen, von Ihnen zu hören, lassen Sie uns wissen, wie wir unsere Arbeit verbessern und für Sie verbessern können. Schreiben Sie uns auf der E-Mail-Site