24.09.2024
Heim / Windows-Übersicht / Vba für to ​​step ist ein einfaches Beispiel dafür, wie es funktioniert. VBA-Schleifen. Laborarbeit zu Programmiergrundlagen

Vba für to ​​step ist ein einfaches Beispiel dafür, wie es funktioniert. VBA-Schleifen. Laborarbeit zu Programmiergrundlagen

Operatorsyntax:

FürSchalter= Start TOEnde[SchrittSchritt]

Block_Operatoren

NächsteSchalter

Hier ist angegeben:

Für Für (erforderliches SchlüsselwortVB);

Zu Zu (erforderliches SchlüsselwortVB);

Block_Operatoren– ein oder mehrere Operatoren angerufen Körper des Zyklus;

Schalter - eine ganzzahlige Variable, die die Anzahl der ausgeführten Schleifen zählt;

Anfang, Ende - Anfangs- und Endzählerwerte;

Schritt Schritt(SchlüsselwortVB);

Schritt – Zählerwechselschritt; kann negativ sein; Der Parameter ist optional, denn wenn der Schritt 1 ist, können Sie Schritt Schritt untere;

Weiter – weiter (erforderliches Schlüsselwort VB, Eintrag des Operators „Ende der Schleife“).

Zählerwert (Anfang, Ende) Es kann sein, dass es welche gibt Numerische Konstanten oder Variablen vom Typ Integer oder Real können negative oder positive Zahlen sein. Damit der Schleifenkörper mindestens einmal ausgeführt werden kann, muss dies der Fall sein Anfang ≤ Ende, Wenn Schritt> 0, und Anfang ≥ Ende, Wenn Schritt< 0. Sobald sich herausstellt, dass Schalter>Ende ( Wenn Start< Конец), Die Schleifenausführung endet. Wenn Start =Ende, die Schleife wird einmal ausgeführt;

Beispiel 9.1 .FunktionsbewertungY = 2 – 1.5 Sinxwenn sich X in Schritten von 0,2 im Bereich ändert.

Ein Fragment eines Programms zur Berechnung von Y und zur Ausgabe von Argument X und Funktion Y:

Für X = 0 bis 2,4 Schritt 0,2

Y = 2 – 1,5*Sin(X)

Um zu verstehen, wie diese Schleife funktioniert, finden Sie hier ein Programm für eine ähnliche Schleife, das mit erstellt wurde OperatorGehe zu, Tags, OperatorWennDann.

M1: X = X + 0,2

Wenn X<= 2.4 Then

Y = 2 – 1,5*Sin(X)

Schauen wir uns an, wie dieses Programm funktioniert. Die erste Berechnung Y ist nicht standardmäßig, als würde sie aus dem Zyklus fallen. Der Zyklus beginnt nach der ersten Übergabe der Steuerung GoToM1 an Label M1. In der mit M1 bezeichneten Zeile wird das Argument X um einen Schritt von 0,2 erhöht und sofort geprüft, ob der neue Wert von X den Endwert von 2,4 überschreitet. Wenn der Wert nicht überschritten wird, wird die Berechnung von Y mit diesem neuen X wiederholt. Anschließend wird der GoToM1-Operator erneut ausgeführt und die Steuerung an die Zeile mit der Bezeichnung M1 übertragen. Diese Iterationen (Zyklen) der Berechnung von Y enden, sobald X 2,4 überschreitet.

Vergleichen wir nun das Programm mit If mit der For...Next-Schleife.

Für X = 0 bis 2,4 Schritt 0,2

ersetzt zwei Zeilen

M1: X = X + 0,2

Wenn X<= 2.4 Then

Es sind die letzten beiden Codezeilen, die in der For-Schleife ausgeführt werden, aber wir sehen sie nicht. Wir haben sie mit der Zeile cFor... codiert. Die GoTo M1-Codezeile ist mit dem Wort Next X (wörtlich: nächstes X) codiert. Dadurch ergibt sich eine kompakte Bauweise.

Wenn Sie die For...Next-Schleife verwenden, müssen Sie lernen, wie Sie den Schleifenzähler zur Lösung verschiedener Probleme verwenden. Um herauszufinden, wie Sie einen Zähler zur Lösung eines Problems verwenden können, müssen Sie Folgendes tun Analysieren Sie die Formulierung des Problems und finden Sie Änderungsmuster in einigen Parametern des Problems.

Beispiel 9.2 . Bestimmung der Summe der Elemente einer Reihe: .

Programmfragment:

S = 0 ‘ S – Summe der Reihe

Für i = 1 bis 16‘ ist der Zähler i der Nenner des Bruchs

S = S + 1/i‘ Akkumulation der Summe

Drucken Sie „S =“; S‘ gibt den Betrag S in das Formular aus

Für jeden Wert des Zählers i bildet der Ausdruck 1/i nacheinander die Elemente der Reihe, beginnend bei 1.

Beispiel 9.3 . Berechnen der Summe einer Reihe von Elementen
.

Programmfragment:

S = 0 ‘ S – Summe der Reihe

Für i = 1 bis 18‘ Zähler i – Zähler

S = S + i/(i + 1)‘ Nenner ist 1 größer als Zähler

Drucken Sie „S =“; S‘ gibt den Betrag S in das Formular aus

Beispiel 9.4 . Berechnung der Summe: 5 + 8 + 11 + … + 32 + 35

Programmfragment:

S = 0 ‘ S – Summe der Reihe

Für i = 5 bis 35 Schritt 3 ‘ erhalten wir die Arithmetik _

Progression mit Nenner 3

Drucken Sie „S =“; S

Beispiel 9.5. Berechnen der Summe für ein gegebenes x:

Die Analyse des Problems zeigt, dass der Grad von X zwischen 1 und 10 variiert. In diesem Fall ist der Zähler im Koeffizienten von Zähler i. Dann können Sie ein Programm wie dieses (Fragment) erstellen:

S = 1 ‘ S – Summe der Reihe

Für i = 1 bis 10‘ wie Zähler i ändert sich der Grad bei X

S = S + (-1)^i*(i + 1)*x^i / (i + 2)

Drucken Sie „S =“; S

ZyklenFürNächsteverwendet fürEingabe, Ausgabe UndArray-Verarbeitung .

Beispiel 9.6. Eingabe und Ausgabe von Werten der Array-Elemente B(N).

Programmfragment:

„Wir verzichten darauf, den Wert der Variablen N zuzuweisen, _

im Formular in das Textfeld txtN eingegeben:

B(i) = InputBox("Element B(" & i & ") eingeben", _

„Eingabearray B(“ & N & „)“)

Drucken " "; Bi);

Funktion InputBox() Zeigt ein Dialogfeld mit einer Schaltfläche zum Schließen, einer angegebenen Meldung, einem Eingabefeld und Schaltflächen an OK,Stornieren, mit einem bestimmten Header (oder ohne). Wenn die Zahl 12 eingegeben wird – die Größe des Arrays N, dann sieht dieses Fenster in unserem Beispiel beim ersten Erscheinen so aus:

Wie wir sehen können, die Botschaft Geben Sie Element B(1) ein fordert Sie auf, den Wert des ersten Elements in das Textfeld einzugeben. Dieses Fenster wird 12 Mal angezeigt, da das Array 12 Elemente enthält. Dies ergibt sich aus dem Formulartitel. Der Index des Elements B(i) in der Einladung variiert zwischen 1 und 12.

Wenn Sie nur die Werte der Elemente des Arrays B(N) auf dem Formular anzeigen möchten, besteht der Schleifenkörper aus einer Anweisung:

Das Anzeigen von Array-Elementen zum Ausführen einiger Aktionen an ihnen erfolgt ebenfalls mithilfe des For...Next-Schleifenoperators.

Geben wir Beispiele für die Verarbeitung eindimensionaler Arrays.

Beispiel 9.7 . Bestimmen des maximalen Elements im Array B(M).

Ohne die Eingabe von Anfangsdaten und die Ausgabe von Ergebnissen beschreiben wir kurz den Algorithmus:

    Wir deklarieren eine Variable Bmax, in die wir den Wert des ersten Elements des Arrays eingeben, und eine Variable Imax, der wir 1 zuweisen – den Index des ersten Elements des Arrays.

    In einer Schleife durchsuchen wir mit dem For...Next-Operator alle Elemente des Arrays, beginnend mit dem zweiten. Mit dem If...Then-Operator vergleichen wir ihre Werte mit dem in der Bmax-Variablen gespeicherten Wert.

    Wenn sich herausstellt, dass der Wert eines Array-Elements größer als der Wert von Bmax ist, wird Bmax der Wert dieses Elements und dem Wert Imax der Index dieses Array-Elements zugewiesen.

Nach dem Ende der Schleife enthält die Variable Bmax den Wert des maximalen Elements und Imax seinen Index (Nummer).

Das Programm für diesen Teil des Algorithmus.

Bmax = B(1): Imax = 1

Wenn B(i) > Bmax, dann ist Bmax = B(i): Imax = i

Beispiel 9.8. Bestimmen der Summe, des Produkts und der Anzahl positiver Elemente eines ArraysD(M).

Variablen: S, P, K – jeweils die Summe, das Produkt und die Anzahl der positiven Elemente.

Algorithmus so eine Definition:

    Wir weisen den Variablen S und K Null zu, und der Variablen P weisen wir 1 zu. In der Regel werden die Variablen, in denen die Summe akkumuliert wird, hier sind es S und k, vor der Schleife immer auf Null zurückgesetzt, und die Variablen in dem das Produkt berechnet wird, erhalten den Wert 1.

    Mit der For...Next-Schleife gehen wir alle Elemente des Arrays durch und prüfen, ob sie positiv sind (D(i) > 0).

    Wenn sich herausstellt, dass das Element positiv ist, addieren wir seinen Wert zum Wert der Summe S und speichern die neue Summe in derselben Variablen. Die Variable P wird mit dem positiven Wert des Elements multipliziert und ebenfalls in der Variablen P gespeichert. Und wir addieren 1 zur Variablen K und speichern den neuen Wert in derselben Variablen

Programm Dieser Teil des Algorithmus sieht folgendermaßen aus:

S = 0: P = 1: K = 0

Wenn D(i) > 0, dann

S = S + D(i) ‘ so summiert sich der Betrag _

positive Werte der Array-Elemente D(i)

P = P*D(i) ‘ Definition des Produkts von positiv

‘ Array-Elemente

K = K + 1‘ dieser Operator heißt COUNTER, hier ist er

„definiert die Anzahl der positiven Array-Elemente

Beispiel 9.9. Ermitteln der Summe, des Produkts, der Anzahl und des Durchschnitts ungerader Array-ElementeD(M).

Hier ist ein Fragment eines Programms für eine solche Definition.

S = 0: P = 1: K = 0

Wenn D(i) Mod 2<>0 Dann

Ssr = S/k‘ Berechnung des Durchschnitts der ungeraden Elemente

Vergleichen Sie dieses Programmfragment mit dem Programm in Beispiel 9.8. Dieses Programm wiederholt das vorherige fast vollständig. Lediglich die Bedingung in der If-Anweisung hat sich geändert. BedingungD(i) Mod 2<>0 bedeutet, dass wir nach Elementen des Arrays D(i) suchen, die nicht gerade durch 2 teilbar sind, also ungerade Elemente. Wenn wir die Bedingung D(i) Mod 2 = 0 prüfen, dann wählen wir gerade Elemente des Arrays aus.

Wie bekannt ist, Division durch Mod gibt den Rest der Division in ganzen Zahlen an. Nach der Ausführung des Operators d = 34Mod4 ist die Variable d beispielsweise gleich 2. Um Array-Elemente auszuwählen, die ein Vielfaches von 4 sind, müssen wir daher die Bedingung D(i) Mod 4 = 0 überprüfen. Die Bedingung wird ähnlich sein, wenn wir nach Elementen suchen, die Vielfache anderer Zahlen sind. Diese anderen Zahlen werden anstelle von 4 geschrieben.

Beispiel 9.10. Array-Elemente schreibenR(N), Vielfache von 5, in ein anderes Array und Ausgabe des neuen Arrays in das Formular.

Bezeichnen wir ein anderes Array, zum Beispiel R5(N). Es sollte davon ausgegangen werden, dass die Größe dieses neuen Arrays mit der des Originals übereinstimmt, da im Extremfall alle Elemente ein Vielfaches von 5 sein können.

Problemalgorithmus:

    Zähler k zurücksetzen. Mit dem For...Next-Schleifenoperator durchsuchen wir alle Elemente des Arrays R(N).

    Wir prüfen jedes Element auf ein Vielfaches von 5, indem wir den If...Then-Operator verwenden und das Array-Element durch Mod dividieren.

    Wenn das Element ein Vielfaches von 5 ist, bilden wir mit einem Zähler vom Typ k=k+1 die Indizes des Arrays R5(N), beginnend bei 1, und schreiben sie in dieses andere Array –R5(N).

    Wenn k von Null verschieden ist, zeigen Sie das Array R5() im Formular an.

    Wenn k gleich Null ist, geben wir aus: „Es gibt keine durch 5 teilbaren Elemente.“

Programmfragment:

Wenn R(i) Mod 5, dann k = k + 1: R5(k) = R(i)

Wenn k<>0 Dann

Drucken „Keine durch 5 teilbaren Elemente“

Schleifen können in anderen Schleifen verschachtelt werden.

Lassen Sie uns die Arbeit demonstrieren verschachtelte Schleifen . Das folgende Programm zeigt die Werte der Zykluszähler i, j und k an. Aus der Ausgabe von i, j, k wird deutlich, wie verschachtelte Schleifen ausgeführt werden.

Private Sub frmCycle_DblClick()

ScaleMode = 4‘ Einheiten – Symbole

Für i = 1 bis 3‘ äußere Schleife

Drucken Sie "i = "; ich;

Für j = 1 bis 4‘ 1. verschachtelte Schleife

CurrentX = TextWidth("i = 1") + 5

Drucken Sie "j = "; J;

CurrentX = TextWidth("i = 1 j = 1") + 7

Für k = 1 bis 5‘ 2. verschachtelte Schleife

Das dargestellte Formular (Abb. 1) zeigt die Ergebnisse der Ausgabe der Zähler aller drei Schleifen: die äußere Schleife – Zähler i, die erste verschachtelte Schleife – Zähler j und die zweite, innerste Schleife – Zähler k. Wie wir sehen, Der langsamste Zähler ist die äußere Schleife(poi) und der „schnellste“ ist der Zähler der innersten Schleife (nachk).

Das Programm wird nach einem Doppelklick mit der linken Maustaste auf das frmCicli-Formular ausgeführt.

CurrentX, CurrentY – Formulareigenschaften, die die X- und Y-Koordinaten des Startpunkts für die Informationsausgabe mit der Print-Methode angeben (siehe Abb. 1 für die Position der X- und Y-Achsen auf dem Formular).

TextWidth() ist eine Funktion, die die Breite des in der Funktion angegebenen Texts als Argument in doppelten Anführungszeichen zurückgibt.

Bei der Verarbeitung zweidimensionaler Arrays (Matrizen) werden verschachtelte Schleifen verwendet. Bei einigen Aufgaben, mit Ausnahme der Ein- und Ausgabe von Elementen eines zweidimensionalen Arrays, können Sie sich jedoch auf eine Schleife beschränken. Schauen wir uns einige Beispiele der Matrixprogrammierung an.

Beispiel 9.11. Eingabe und Ausgabe einer Matrix (zweidimensionales Array) aus ganzen ZahlenintA(N).

Sie können die Matrix eingeben nach Zeilen und nach Spalten . Einfacher geht es Zeile für Zeile, wenn Sie die Ausgabe von Array-Elementen direkt nach der Eingabe in das Formular programmieren.

Matrix-Eingabe und -AusgabeZeile für Zeile - Fragment 1.

Dim M als Ganzzahl, N als Ganzzahl, i als Ganzzahl, j als Ganzzahl

Dim intA() As Integer‘ deklariert ein dynamisches Array

M = Val(txtN.Text) ‘ M – Anzahl der Zeilen

N = Val(txtN.Text) ‘ N – Anzahl der Spalten

ReDim intA(M, N) As Integer‘ definiert das Array neu

Für i = 1 To M‘ behält i seinen Wert bis zur vollständigen Auflösung

„Die verschachtelte Schleife auf j wird nicht ausgeführt.“

Drucken " "; intA(i, j); ‘ Zeile für Zeile ausgeben

Drucken ‘ gehe zum Anfang einer neuen Zeile

Um eine Matrix nach Spalten einzugeben, sollten Sie die äußere Schleife in j (gibt die Spaltennummern an) und die innere Schleife in i (gibt die Zeilennummern an) erstellen.

Matrix-Eingabe und -Ausgabenach Spalten Fragment 2.

PrY = 2500: CurrentY = PrY ‘ PrY legt die Y-Koordinate des Starts fest

‘ zeigt das erste Element jeder Spalte im Formular an

Für j = 1 bis N‘ behält j seinen Wert bis zur vollständigen Auflösung

„Die verschachtelte Schleife auf i wird nicht ausgeführt.“

intA (i, j) = InputBox("Element eingeben intA(" & i & „, & j & ")", _

"Eingabematrix intA(" & M & „, & N & ")")

Drucken Tab(6 * j); intA(i, j)‘ Ausgabe nach Spalten

CurrentY = PrY ', um das erste Element anzuzeigen

' nächste Spalte

Dieses zweite Programmfragment wiederholt nicht die ersten 5 Zeilen des ersten Fragments. Die Funktion Tab(6 * j) legt den Beginn der Ausgabe in einer Zeile (in Zeichen) fest, beginnend am linken Rand des Formulars. Die Koordinate PrY beträgt hier 2500 Twips, Sie können jedoch einen anderen Wert wählen.

Beispiel 9.12 . Ordnen von Array-ElementwertenV(N) aufsteigend.

Es gibt mehrere Algorithmen zum Ordnen von Arrays. Hier ist einer davon: Verwendung verschachtelter SchleifenFürNächstewir wählen Elemente vom ersten bis zum vorletzten aus und vergleichen jedes von ihnen mit den nachfolgenden Elementen; Wenn sich herausstellt, dass das nachfolgende Element kleiner als das ausgewählte ist, tauschen wir sie aus.

Ein Fragment eines Programms, das diesen Algorithmus implementiert:

Für i = 1 bis N – 1

Für j = i + 1 Zu N

Wenn V(j)< V(i) Then P = V(i): V(i) = V(j): V(j) = P

Lassen Sie uns dieses Fragment des Programms erklären.

Mithilfe einer äußeren Schleife mit einem Zähler i wählen wir das Element V(i) aus, um es mit nachfolgenden Elementen zu vergleichen. Die innere Schleife mit einem Zähler j wählt nachfolgende Elemente von V(j) zum Vergleich aus. Der Anfangswert ist gleich i + 1. Dies ist das erste Element der folgenden.

Um die Werte der Elemente V(i) und V(j) auszutauschen, führen wir eine Variable P ein, in der wir vorübergehend den Wert eines der Elemente des Arrays „verstecken“ (im Programm ist dies V(i). )). Dann wird dem Element V(i) der Wert des Elements V(j) zugewiesen, und dem Element V(j) wird der Wert V(i) zugewiesen, der in der Variablen P gespeichert wird. Wenn wir den Wert V(j) in P „verstecken“, dann sieht der Code zum Austausch von Werten wie folgt aus: P = V(j): V(j) = V(i): V(i) = P . Das Ergebnis wird sich nicht ändern.

Zu Sortieren Sie das Array in absteigender Reihenfolge, reicht es aus, die Bedingung für die Überprüfung in der Form V(j) > V(i) zu schreiben, d. h. das Ungleichheitszeichen in ein anderes zu ändern.

Wenn das Array nicht numerisch, sondern ein String ist und Nachnamen in die Array-Elemente eingegeben werden, können Sie mit dem Programm in Beispiel 9.12 die Liste der Nachnamen alphabetisch ordnen. Tatsache ist, dass für die Buchstaben des in einem Computer verwendeten Alphabets die folgenden Ungleichungen gelten: A< Б < В < Г….< Я и т. д., поскольку числовые коды букв алфавита последовательно увеличиваются, начиная с А и до конца алфавита. Это же справедливо и для букв английского алфавита.

Beispiel 9.13 . Berechnen der Summe positiver Elemente für ungerade Spalten einer MatrixF(M, N) und geben Sie die Beträge im Formular aus.

Programmalgorithmus:

    Mithilfe der äußeren Schleife mit Schritt 2 bilden wir einen Index der ungeraden Spalten der Matrix, beginnend mit der ersten Spalte.

    Wir setzen die Summe S zurück, in der sich die Summe der positiven Elemente ansammelt.

    In der inneren Schleife überprüfen wir das Vorzeichen des Array-Elements.

    Wenn das Array-Element positiv ist (> 0), berechnen wir die Summe S.

    Nach dem Ende der inneren Schleife zeigen wir die Summe S auf dem Formular an.

Fragment Programme:

Für j = 1 bis N Schritt 2

Wenn F(i, j) > 0, dann ist S = S + F(i, j)

Drucken Sie „Spaltensumme“; J; „:“; S‘ j – Spaltennummer!

Mit verschachtelten Schleifen können Sie organisieren Aufzählung von Optionen und Probleme lösen, die nicht analytisch gelöst werden können. Als Ergebnis der Suche werden Lösungsoptionen erhalten, aus denen eine oder mehrere ausgewählt werden, die den Bedingungen des Problems entsprechen.

Beispiel 9.14. Es gibt 1801 Rubel. Wie viele Pralinen kann man für 31 Rubel kaufen? und Brötchen für 18 Rubel, um das ganze Geld komplett auszugeben.

Programm:

Betrag = 1801

AllChocolates = Summe\31: AllBulks = Summe\18

Für i = 1 To AllChocolates

Für j = 1 Zu VseBulk

Preis = i * 31 + j * 18‘ Gesamtkaufpreis

Wenn Preis = 1801, dann

Drucken Sie „Schokolade:“; ich; Tab(19); „Bulok:“; J

Lassen Sie uns das Programm erklären, in dem wir auf Russisch benannte Variablen verwenden.

Zunächst legen wir fest, wie viele Pralinen oder Brötchen maximal für den gesamten Betrag gekauft werden können. Wir verwenden die resultierenden Werte von AllChocolates und AllBulks, um die Anzahl der Suchen nach der Anzahl der Pralinen und Brötchen zu begrenzen. Für jeden Wert der Anzahl der Pralinen (i) und der Anzahl der Brötchen (j) ermitteln wir den Gesamtpreis für deren Kauf. Wenn der berechnete Preis 1801 beträgt, ist die ausgewählte Option eine der Lösungen für das Problem.

Die Funktion Tab() gibt an, ab welcher Position vom Rand des Formulars aus die Informationen, die dieser Funktion folgen, angezeigt werden. Wenn Tab(19), dann ab der 19. Position.

Das Programm zeigt 3 mögliche Kaufoptionen an:

Schokolade 7, Brötchen 88

Schokolade 25, Brötchen 57

Schokolade 43, Brötchen 26

Wenn Sie eine eindeutige Antwort geben möchten, müssen Sie eine zusätzliche Bedingung formulieren. Beispielsweise wurden „weniger Brötchen als Pralinen gekauft“. Dann wird die einzige Lösung die 3. Option sein.

Es gibt viele mathematische Probleme, die mithilfe der Nested-Loop-Programmierung einfach mit roher Gewalt gelöst werden können.

Neben Entscheidungsstrukturen gibt es eine weitere Art von Kontrollstruktur, den sogenannten Zyklus.

Zyklus ist eine algorithmische Struktur, mit deren Hilfe mehrfache Wiederholungen von Operatorblöcken umgesetzt werden.

In Visual Basic gibt es drei Haupttypen von Schleifen, die mithilfe der Konstrukte For:Next, Do:Loop und While:Wend implementiert werden.

Für: Nächste Schleife. Wird verwendet, wenn die Anzahl der Wiederholungen eines bestimmten Anweisungsblocks im Voraus bekannt ist. Dieses Design sieht so aus:

Für Zähler = Anfangswert Zum Endwert Operatoren1 Operatoren2 Nächster [Zähler]

Bei der ersten Ausführung der obigen Anweisungen wird der Zählervariablen ein Anfangswert zugewiesen, danach sind zwei Optionen möglich. Wenn als Ergebnis der Prüfung der Bedingung Zähler > Endwert der Wert True erhalten wird, endet die Schleife und die Blöcke Operatoren1 und Operatoren2 werden nie ausgeführt. Ist das Ergebnis des Bedingungstests dagegen „False“, dann werden die Anweisungsblöcke zum ersten Mal ausgeführt, danach erfolgt der Übergang zum Schleifenanfang. Als nächstes wird der Wert der Zählervariablen um einen Schritt erhöht, der sich nach dem Schlüsselwort „Step“ befindet (wenn es nicht vorhanden ist, wird „step = 1“ gesetzt). Danach wird erneut geprüft, ob die Bedingung Zähler > Endwert usw. wahr ist. Das Ende der Schleife erfolgt in dem Moment, in dem das Ergebnis dieser Prüfung den Wert Wahr ergibt.

Es ist oft notwendig, eine Schleife „im Notfall“ zu beenden, wenn eine zusätzliche Bedingung erfüllt ist. In diesem Fall sollten Sie innerhalb der Schleife die Servicephrase Exit:For verwenden, die sich normalerweise in befindet Kontrollstruktur, Zum Beispiel:

Wenn Bedingung, dann Beenden für

Wenn das Ergebnis der Überprüfung der Bedingung „True“ ist, wird die Ausführung der Schleife beendet und der Block „operator1“ wird erneut ausgeführt, der Block „operator2“ jedoch nicht.

Machen Sie:Schleife. Es wird verwendet, wenn die Anzahl der Wiederholungen der Schleifenkörperoperatoren im Voraus unbekannt ist. Es gibt vier Varianten dieses Designs. Bei Verwendung der ersten beiden wird die Schleife entweder mehrmals oder gar nicht ausgeführt.

Führen Sie Until-Bedingungsschleifenanweisungen aus

Wenn das Ergebnis der Überprüfung der Bedingung „Falsch“ ist, wird der Anweisungsblock ausgeführt, andernfalls erfolgt der Übergang zu der Anweisung, die sich nach dem Dienstwort „Schleife“ befindet. Wenn andererseits der erste Test der Bedingung das Ergebnis True zurückgibt, wird die Schleife kein einziges Mal ausgeführt.

Führen Sie While-Bedingungsschleifenanweisungen aus

Wenn die Bedingung wahr ist, wird der Anweisungsblock ausgeführt. Wenn sie jedoch falsch ist, d. h. das Ergebnis der Prüfung falsch ist, wird die Schleife kein einziges Mal ausgeführt.

Wenn die letzten beiden Konstrukte verwendet werden, wird die Schleife mindestens einmal ausgeführt.

Führen Sie Anweisungen in einer Schleife aus, bis die Bedingung erfüllt ist

Der Anweisungsblock wird solange ausgeführt, wie das Ergebnis der Prüfung der Bedingung False ist, andernfalls endet die Schleife.

Machen Sie Anweisungen eine Schleife während der Bedingung

Wenn die Bedingung falsch ist, wird der Anweisungsblock ausgeführt, wenn sie jedoch wahr ist, d. h. Das Ergebnis der Prüfung ist True, dann erfolgt das Ende des Zyklus.

While-Schleife:Wend. Es wird auch verwendet, wenn die Anzahl der Wiederholungen der Schleifenkörperanweisungen im Voraus unbekannt ist, und hat die folgende Syntax:

Während Bedingung Wend Aussagen

Wenn das Ergebnis der Überprüfung der Bedingung wahr ist, wird der Operatorblock ausgeführt, andernfalls erfolgt der Übergang zu dem Operator, der sich nach dem Dienstwort Wend befindet. Wenn andererseits der erste Test der Bedingung das Ergebnis „False“ zurückgibt, wird die Schleife kein einziges Mal ausgeführt.

VBA. Organisation von Zyklen.

Schleifenanweisungen werden verwendet, um eine Aktion oder eine Gruppe von Aktionen eine bestimmte Anzahl von Malen zu wiederholen. Die Anzahl der Wiederholungen (Loop-Iterationen) kann vorgegeben oder berechnet werden.

VBA unterstützt zwei Arten von Schleifenkonstrukten:

  1. Schleifen mit einer festen Anzahl von Wiederholungen ( Gegenschleifen).
  2. Schleifen mit einer unbegrenzten Anzahl von Wiederholungen ( Bedingte Schleifen).

Für alle Arten von Zyklen wird das Konzept verwendet Schleifenkörper , der einen Anweisungsblock definiert, der zwischen den Start- und Endanweisungen der Schleife eingeschlossen ist. Jede Wiederholung der Ausführung der Anweisungen des Schleifenkörpers wird aufgerufen Iteration

Feste Zyklen

VBA bietet zwei Kontrollstrukturen zum Organisieren einer festen Schleife: For ... Next (Schleife mit Zähler) und For Each ... Next (Schleife mit Aufzählung).

Operator für...Weiter Dies ist eine typische Zählerschleife, die eine bestimmte Anzahl von Iterationen ausführt. Die Syntax der For...Next-Anweisung lautet:

Für<счетчик> = <начЗначение>Das<конЗначение>

<блок операторов>

Nächste [<счетчик>]

Ein Beispiel für die Verwendung des For...Next-Operators.

Listing 1. Für … Nächster Operator

‘ AUFGABE: Erstellen Sie ein Programm, das zwei Nummern vom Benutzer empfängt.

‘ Addiert alle Zahlen in dem durch diese beiden Zahlen angegebenen Bereich und dann

‘ zeigt den resultierenden Betrag an.

Unterprobe7()

Dim i As Integer ‚Zykluszähler‘

Dim sStart ‚anfänglicher Zählerwert

Dim sEnd ‘Endzählerwert

Dim sSum As Long‘ resultierende Summe

sStart = InputBox(“Geben Sie die erste Zahl ein:”)

sEnd = InputBox(“Geben Sie die zweite Zahl ein:”)

sSumme = 0

Für i = CInt(sStart) Zu CInt(sEnd)

sSumme = sSumme + i

Als nächstes i

MsgBox „Die Summe der Zahlen von „ & sStart &“ bis „ & sEnd &“ ist: „ & sSum

Sub beenden

Schleifenanweisung For Each...Nextgehört zur Kategorie der Objekttypoperatoren, d.h. gilt in erster Linie für Sammlungen Objekte sowie Arrays . Der Schleifenkörper wird eine feste Anzahl von Malen ausgeführt, entsprechend der Anzahl der Elemente im Array oder in der Sammlung. For Each...Next-Anweisungsformat:

Für jeden<элемент>In<группа> <блок операторов>Nächste [<элемент>]

Bedingte Schleifen (undefinierte Schleifen)

Bedingungsschleifen werden verwendet, wenn wiederholte Aktionen nur unter bestimmten Bedingungen ausgeführt werden müssen. Die Anzahl der Iterationen ist nicht definiert und kann im Allgemeinen gleich Null sein (insbesondere für Schleifen mit einer Vorbedingung). VBA bietet Entwicklern mehrere Kontrollstrukturen zum Organisieren von Bedingungsschleifen:

  • Vier Arten von Do..Loops, die sich in der Art der geprüften Bedingung und der Zeit unterscheiden, die zum Abschluss dieser Prüfung benötigt wird.
  • Dauerschleife While... Wend.

Typisch ist die Do While...-Schleife Schleife mit Vorbedingung. Die Bedingung wird überprüft, bevor der Schleifenkörper ausgeführt wird. Der Zyklus setzt seine Arbeit fort, bis er<условие>ausgeführt wird (d. h. den Wert True hat). Da die Prüfung am Anfang durchgeführt wird, wird der Schleifenkörper möglicherweise nie ausgeführt. Do While... Schleifenformat:

Do While<условие>

<блок операторов>

Schleife

Listing 2. Führen Sie eine While...-Schleife aus

‘ AUFGABE: Erstellen Sie ein Programm, das Benutzereingaben erfordert

„eine beliebige Folge von Zahlen.“ Die Eingabe muss beendet werden

‘ erst wenn die Summe der eingegebenen ungeraden Zahlen 100 überschreitet.

Unterprobe8()

Dim OddSum As Integer ‚Summe ungerader Zahlen‘

Dim OddStr As String ist ein String mit ungeraden Zahlen

Dim Num‘, um eingegebene Zahlen zu akzeptieren

OddStr = „“‘Initialisierung der Ausgabezeichenfolge

OddSum = 0 'OddSum initialisieren

Machen Sie While OddSum< 100 ‘начало цикла

Num = InputBox(“Geben Sie eine Zahl ein:“)

Wenn (Num Mod 2)<>0 Dann „Paritätsprüfung“.

OddSum = OddSum + Num‘ Akkumulation der Summe ungerader Zahlen

OddStr = OddStr & Num & ” ”

Ende wenn

Schleife

„Drucke eine Zeichenfolge mit ungeraden Zahlen.“

MsgBox prompt:=“Ungerade Zahlen: ” & OddStr

Sub beenden

Do...Loop While-Anweisungfür Organisation konzipiertSchleife mit Nachbedingung. Die Bedingung wird überprüft, nachdem der Schleifenkörper mindestens einmal ausgeführt wurde. Der Zyklus setzt seine Arbeit fort, bis<условие>bleibt wahr. Do... Loop While-Format:

Tun<блок операторов>Loop While<условие>

Listing 3. Schleife mit Nachbedingung

‘ AUFGABE: Erstellen Sie ein Programm für das Spiel „Rate die Zahl.“ Das Programm muss zufällig sein

‘ Möglichkeit, eine Zahl im Bereich von 1 bis 1000 zu generieren, muss der Benutzer

Erraten Sie diese Zahl. Für jede eingegebene Zahl zeigt das Programm einen Hinweis an

„„mehr“ oder „weniger“.

Unterprobe8()

„Randomize Timer“ initialisiert den Zufallszahlengenerator

Dim msg As String‘ Nachrichtenzeichenfolge

Dimmen Sie „SecretNumber“ auf die Länge, „UserNumber“ auf die Variante

Beginn: SecretNumber = Round(Rnd * 1000) ‘ computergenerierte Zahl

UserNumber = Leer‘ vom Benutzer eingegebene Nummer

Mach das Gameplay

Wählen Sie „Fall wahr“ aus

Case IsEmpty(UserNumber): msg = „Geben Sie eine Zahl ein“

Fallbenutzernummer > Geheimnummer: msg = „Zu viele!“

Fallbenutzernummer< SecretNumber: msg = “Слишком мало!”

Endauswahl

UserNumber = InputBox(prompt:=msg, Title:=“Erraten Sie die Zahl“)

Loop While UserNumber<>Geheimnummer

' Prüfung

If MsgBox(“Noch einmal spielen?“, vbYesNo + vbQuestion, „Du hast es erraten!“) = vbYes Dann

Gehe zum Anfang

Ende wenn

Sub beenden

Schleifen machen bis... Schleife und machen... Schleife bis sind Umkehrungen der zuvor diskutierten bedingten Schleifen. Im Allgemeinen funktionieren sie ähnlich, mit der Ausnahme, dass der Schleifenkörper ausgeführt wird, wenn die Bedingung falsch ist (d. h.<условие>=Falsch). Do Until... Schleifenformat:

Tun bis<условие> <блок операторов>Schleife

Do... Loop Until-Schleifenformat:

<блок операторов>

Schleife bis<условие>

Praktische Aufgabe:Schreiben Sie die Programme in den Listings 10 und 11 mit invertierten Schleifenanweisungen neu.

Loop While...Wend gilt auch für bedingte Schleifen. Dieser Operator stimmt vollständig mit der Do While...-Schleifenstruktur überein. While...Wend-Schleifenformat:

Während<условие>

<блок операторов>

Wend

Eine Besonderheit dieses Operators ist die Unmöglichkeit, den Abschluss (Unterbrechung) des Schleifenkörpers zu erzwingen (der Exit Do-Operator funktioniert nicht in der While ... Wend-Schleife).

Einen Zyklus unterbrechen

Um eine Iteration vorzeitig zu beenden und die Schleife zu verlassen, wird die Exit-Anweisung verwendet. Dieser Operator ist in jeder zyklischen Struktur außer While... Wend anwendbar. Die allgemeine Syntax für die Verwendung von Exit zum Unterbrechen einer Schleife lautet:

<начало_цикла>

[<блок операторов1>]

Beenden (Für | Tun)

[<блок операторов2>]

<конец_цикла>

Wenn die Exit-Anweisung ausgeführt wird, wird die Schleife unterbrochen und die Kontrolle an die Anweisung übergeben, die der Anweisung folgt<конец_цикла>. Im Rumpf einer Schleife können sich mehrere Exit-Anweisungen befinden.

Listing 4. Verlassen der Schleife erzwingen

Unterprobe9()

Für i = 1 bis 10000000

If i = 10 Then Exit For ‘ Verlassen Sie die Schleife, wenn der Zähler 10 erreicht

Nächste

Lektion aus der Serie: „ Programmierung in Visual Basic.NEN für Schulkinder“

Sie haben sich mit dem ComboBox-Steuerelement vertraut gemacht.
In dieser Lektion werden wir unser Studium der Visual Basic.Net-Sprachoperatoren fortsetzen und uns dabei auf Schleifenoperatoren konzentrieren.
Zyklisch algorithmische Strukturen Es gibt drei Arten:

  1. Zählerschleifen, in denen der Schleifenkörper ausgeführt wird eine bestimmte Menge einmal;
  2. Schleifen zur Verarbeitung von Arrays oder Sammlungen;
  3. Bedingte Schleifen, bei denen der Schleifenkörper ausgeführt wird, solange die Bedingung wahr ist (oder bis die Bedingung wahr wird).

In dieser Lektion betrachten wir den Schleifenoperator mit einem Zähler (For . . . Next). Schreiben wir ein Projekt mit diesem Operator.

Zyklus mit Zähler Für. . . Nex t wird verwendet, wenn im Voraus bekannt ist, wie viele Wiederholungen durchgeführt werden müssen.

Blockdiagramm

Gesamtansicht des Betreibers

For Counter = StartValue To EndValue Loop Body Next [Counter]

Die Syntax des Operators lautet wie folgt: Die Zeile, die mit dem Schlüsselwort „For“ beginnt, ist der Kopf der Schleife, und die Zeile mit dem Schlüsselwort „Next“ ist das Ende der Schleife. Dazwischen befinden sich Anweisungen, die den Hauptteil der Schleife bilden.

Algorithmus zur Ausführung des For-Operators. . . Nächste

  1. Der Wert der Counter-Variable wird auf StartValue gesetzt.
  2. Die Bedingung Zähler wird geprüft<= КонЗнач
  3. Wenn die Bedingung erfüllt ist, wird der Schleifenkörper ausgeführt. Die Zählervariable wird um den Schrittwert geändert: Zähler = Zähler + Schritt.
  4. Wenn die Counter-Variable den Wert ConValue erreicht, wird die Schleife beendet und die folgenden Anweisungen werden ausgeführt.

Mit dem Exit For-Konstrukt kann der Programmierer ein vorzeitiges Verlassen der Schleife organisieren. In diesem Fall wird die Schleife automatisch verlassen und die Steuerung an den nächsten Befehl nach der Schleife übergeben.

Projekt „Erträge aus Einlagen“

Schreiben Sie ein Projekt, das die Erträge aus einer Einlage berechnet und die Berechnung von einfachen Zinsen und Zinseszinsen ermöglicht. Am Ende der Einzahlungslaufzeit fallen einfache Zinsen an, Zinseszinsen fallen monatlich an und werden zum ursprünglichen Einzahlungsbetrag addiert, und im nächsten Monat fallen Zinsen auf den neuen Betrag an. Die empfohlene Form ist in der Abbildung dargestellt.

Ausführungstechnologie

In diesem Tutorial wurde gezeigt, wie Sie eine For...Next-Schleife verwenden, um Code eine bestimmte Anzahl von Malen zu wiederholen.

Alle Aktionen einer Prozedur, die eine bestimmte Anzahl von Malen wiederholt werden oder bis eine Bedingung erfüllt oder nicht erfüllt ist, werden aufgerufen Zyklus .

Der Prozess der einmaligen Ausführung aller in einer Schleifenstruktur eingeschlossenen Anweisungen wird aufgerufen Schleifeniteration.

Es werden Schleifenstrukturen aufgerufen, die immer eine bestimmte Anzahl von Malen ausführen Schleifen mit einer festen Anzahl von Iterationen. Andere Arten von Schleifenstrukturen werden abhängig von bestimmten Bedingungen unterschiedlich oft wiederholt. Solche Zyklen heißen unbestimmte Zyklen.

Der Anweisungsblock zwischen Anfang und Ende der Schleife wird aufgerufen „Schleifenkörper“.

Die einfachste Schleifenstruktur ist fester Zyklus .

For..Nächste Schleife

Syntax

Für Schalter = Start Zu Ende
Aussagen
Nächste [ Schalter]

Zähler – jede numerische VBA-Variable
Start – jeder numerische Ausdruck, der den Anfangswert für die Zählervariable definiert
Ende – ein numerischer Ausdruck, der den Endwert für die Zählervariable definiert


Standardmäßig erhöht VBA eine Variable Schalter jedes Mal um 1, wenn die Anweisungen in der Schleife ausgeführt werden. Sie können einen anderen Wert festlegen ( SterSize- irgendein numerischer Ausdruck), um den es sich ändert Schalter.

Stichwort Nächste teilt VBA mit, dass das Ende der Schleife erreicht wurde. Optionale Variable Schalter nach dem Schlüsselwort Nächste muss die gleiche Variable sein Schalter, das nach dem Schlüsselwort angegeben wurde Für am Anfang der Schleifenstruktur.


Nachfolgend finden Sie eine Auflistung der einfachsten Schleife Für ... als nächstes, das die Summe der Zahlen von 1 bis 10 zählt:



Und jetzt zwei Optionen für den Zyklus Für ... als nächstes Verwendung eines anderen Schleifenschritts als eins:



Passt auf! Beim Verringern des Zykluszählers Für ... als nächstes Die Schleife wird ausgeführt, solange die Zählervariable größer oder gleich dem Endwert ist. Wenn der Schleifenzähler inkrementiert wird, wird die Schleife ausgeführt, solange die Zählervariable kleiner oder gleich dem Endwert ist.

Schleife für jeden...nächsten

Zyklus Für jeden..Weiter verwendet keinen Zykluszähler. Zyklen Für jeden..Weiter werden so oft ausgeführt, wie Elemente in einer bestimmten Gruppe vorhanden sind, z. B. einer Sammlung von Objekten oder einem Array (worauf später noch eingegangen wird). Mit anderen Worten, der Zyklus Für jeden..Weiter wird einmal für jedes Element in der Gruppe ausgeführt.

Syntax

Für jeden Element In Gruppe
Aussagen
Nächste [ Element]

Element – ​​eine Variable, die zum Durchlaufen aller Elemente in einer bestimmten Gruppe verwendet wird
Gruppe ist ein Sammlungsobjekt oder Array
Anweisungen – eine, mehrere oder keine VBA-Anweisungen (Schleifenkörper).