Okna.  Wirusy.  Laptopy.  Internet.  biuro.  Narzędzia.  Kierowcy

Operator pętli for next języka VBA służy do wykonania bloku instrukcji określoną liczbę razy, najczęściej pętla ta jest używana podczas przetwarzania tablic. Pętla for next jest najprostsza w swojej dziedzinie, tutaj ustawia się wartości początkowe i końcowe, można także ustawić krok licznika.

Spójrzmy na ogólną składnię:

Dla licznika = początek Do końca
Operatorzy
Następny licznik

Lada– tutaj podajemy nazwę zmiennej, która będzie przechowywać informację o liczbie iteracji (liczbie wykonanych cykli).

Początek– wartość początkowa licznika, jest wyrażeniem liczbowym

Koniec– końcowa wartość licznika, wyrażenie liczbowe określające liczbę przejść.

Krok– opcjonalny parametr pozwalający określić krok wykonania. Jeżeli ten parametr jest nieobecny, wówczas przyrost licznika przy każdym przejściu będzie równy jeden. Użycie kroku jest istotne, jeśli chcesz rozwiązać równanie metodą brutalnej siły, więc możesz ustawić wartość początkową na 1, wartość końcową na 3, a krok na 0,2.

Na samym końcu pętli nie trzeba podawać nazwy zmiennej (licznik), ale ma to znaczenie w przypadku użycia zagnieżdżonej pętli for, dzięki czemu kod będzie bardziej czytelny.

Przykładowo utwórz formularz z dwiema etykietami tekstowymi i jednym przyciskiem, wpisz w edytorze kodu:

Private Sub CommandButton1_Click() Dim i, j, a, b Dla i = 1 Do 10 Krok 2 a = a & i & " " Następny i Dla j = 1 Do 10 Krok 3 b = b & j & " " Następny j Label1 .Caption = a Label2.Caption = b End Sub Private Sub UserForm_Initialize() Label1.Caption = "" Label1.FontSize = 14 Label1.ForeColor = vbBlue Label2.Caption = "" Label2.FontSize = 14 Label2.ForeColor = vbRed CommandButton1. Caption = „Wartości” End Sub

W w tym przykładzie, mamy dwa parametry pętli, każdy o tych samych wartościach początkowych i końcowych, ale pierwszy z nich jest ustawiony na krok 2, a drugi na 3.

Można także podać wartość ujemną w parametrze Krok, w tym przypadku licznik będzie zwiększał się w odwrotnej kolejności, np.:

Private Sub CommandButton1_Click() Dim i, j, SummA, SummB Dla i = 1 do 10 SummA = SummA + i Next For j = 10 do 1 Krok -1 SummB = SummB + j Next Label1.Caption = "Bezpośrednie zamówienie: "&SumA Etykieta2.Caption = "Odwrotna kolejność: " & SummB Koniec Sub

Tutaj obliczamy sumę liczb od 1 do 10 w kolejności do przodu i do tyłu.

Dość często przy zastosowaniu operatora pętli for next w języku VBA może zaistnieć sytuacja, gdy pod pewnym warunkiem konieczne będzie przerwanie sortowania danych; w tym przypadku używane jest wyrażenie Wyjdź dla, Na przykład:

W tym przykładzie zastosowano VBA dla następnej zagnieżdżonej pętli. W pierwszym przypadku sumowane są liczby od 1 do 100, a sumowanie powtarzane jest 100 razy. W drugim przypadku warunek określiliśmy za pomocą instrukcji warunkowej if - jeśli kwota jest większa niż 10 tys. to wyjdź z pętli.

OK, teraz spróbujmy napisać bardziej praktyczny przykład - rozwiązywanie równania kwadratowego metodą brutalnej siły:

Private Sub CommandButton1_Click() Const a = -2, b = 6, c = 20 Wymiar x, wynik, res Dla x = -10 Do 10 Krok 0.5 wynik = a * (x * x) + b * x + c Jeśli wynik = 0 Następnie res = res & „ „ & x End If Next x Label1.Caption = „x dokładnie: „ & res End Sub

W tym przykładzie zadeklarowaliśmy trzy stałe a, b i c, o wartościach -2, 6 i 20, są to parametry równania kwadratowego (a*x*x + b*x + c = 0). W pętli zmienna x zmienia się w zakresie od -10 do 10 w odstępach co 0,5. Przy każdej iteracji sprawdzana jest równość warunku do zera; jeśli warunek jest spełniony, wartość zmiennej x jest zapisywana w zmiennej res. W rezultacie równanie będzie miało dwa rozwiązania: -2 i 5.

Dlatego w tym artykule przyjrzeliśmy się kolejnej pętli for Język VBA, który służy do przetwarzania danej liczby razy tych samych akcji, w następnym artykule przyjrzymy się, który służy do przetwarzania kolekcji, i tam przyjrzymy się również samym kolekcjom.

Wywoływana jest dowolna akcja w procedurze, która jest powtarzana określoną liczbę razy lub do momentu spełnienia lub nie spełnienia jakiegoś warunku cykl .

Wywoływany jest proces jednorazowego wykonania wszystkich instrukcji zawartych w strukturze pętli iteracja pętli.

Wywoływane są struktury pętli, które zawsze wykonują określoną liczbę razy pętle ze stałą liczbą iteracji. Inne typy struktur pętlowych powtarzają się zmienną liczbę razy w zależności od pewnego zestawu warunków. Takie cykle nazywane są nieokreślone cykle.

Nazywa się blok instrukcji znajdujący się pomiędzy początkiem i końcem pętli „korpus pętli”.

Najprostsza struktura pętli to cykl stały .

Dla..Następna pętla

Składnia

Dla lada = początek Do koniec
Sprawozdania
Następny [ lada]

Licznik - dowolna zmienna numeryczna VBA
Start - dowolne wyrażenie numeryczne określające wartość początkową zmiennej licznika
Koniec - wyrażenie liczbowe określające końcową wartość zmiennej licznika


Domyślnie VBA zwiększa zmienną lada o 1 za każdym razem, gdy instrukcje są wykonywane w pętli. Można ustawić inną wartość ( Rozmiar steru- dowolne wyrażenie numeryczne), według którego to się zmieni lada.

Słowo kluczowe Następny informuje VBA, że osiągnięto koniec pętli. Zmienna opcjonalna lada Po słowo kluczowe Następny musi być tą samą zmienną lada, który został określony po słowie kluczowym Dla na początku struktury pętli.


Poniżej znajduje się lista najprostszej pętli W następnym, który liczy sumę liczb od 1 do 10:



A teraz dwie opcje cyklu W następnym używając kroku pętli innego niż jeden:



Notatka! Podczas zmniejszania licznika cykli W następnym pętla jest wykonywana tak długo, jak zmienna licznika jest większa lub równa wartości końcowej, a gdy licznik pętli jest zwiększany, pętla jest wykonywana tak długo, jak zmienna licznika jest mniejsza lub równa wartości końcowej.

Pętla dla każdego..Dalej

Cykl Dla każdego..Następny nie korzysta z licznika cykli. Cykle Dla każdego..Następny są wykonywane tyle razy, ile jest elementów w danej grupie, takiej jak zbiór obiektów lub tablica (co zostanie omówione później). Inaczej mówiąc cykl Dla każdego..Następny jest wykonywany raz dla każdego elementu w grupie.

Składnia

Dla każdego Element W Grupa
Sprawozdania
Następny [ Element]

Element – ​​zmienna służąca do iteracji po wszystkich elementach w określonej grupie
Grupa to obiekt kolekcji lub tablica
Instrukcje - jedna, kilka lub żadna instrukcja VBA (treść pętli).

Pętle umożliwiają wielokrotne wykonanie jednego lub większej liczby wierszy kodu. VBA obsługuje następujące pętle:

For...Dalej Dla każdego...Dalej Wykonaj... Pętla

Konstrukcja For. . . Następny. Jeśli liczba powtórzeń jest znana z góry, używana jest pętla For. . . Następny. Pętla For wykorzystuje zmienną zwaną zmienną pętli lub licznikiem pętli, która jest zwiększana lub zmniejszana o określoną wartość przy każdym powtórzeniu pętli. Składnia tej konstrukcji jest następująca:

Dla licznika = start Aby zakończyć operatory Dalej

Parametry licznika, początku, końca i przyrostu są numeryczne.

Notatka. Parametr przyrostu może być dodatni lub ujemny. Jeśli jest dodatni, parametr start musi być mniejszy lub równy parametrowi end, w przeciwnym razie pętla nie zostanie wykonana. Jeśli przyrost jest ujemny, początek musi być większy niż lub równa się wartości parametr end, aby wykonano treść pętli. Jeśli parametr Step nie jest określony, domyślną wartością parametru inkrementacji jest 1.

VBA wykonuje pętlę For w następującej kolejności:

1. Ustawia wartość licznika zmiennej pętli, od której ma się rozpocząć.

2. Porównuje wartość licznika zmiennej pętli z wartością parametru end. Jeśli licznik jest większy, VBA kończy pętlę. (Jeśli przyrost jest ujemny, VBA przestaje wykonywać pętlę, jeśli wartość licznika zmiennej pętli jest mniejsza niż wartość end.)

3. Wykonuje instrukcje zawarte w treści pętli instrukcji.

4. Zwiększa wartość licznika zmiennej pętli o 1 lub o wartość parametru inkrementacji, jeśli został określony.

5. Powtarza kroki od 2 do 4.

Rozważmy przykład: Oblicz wartość funkcji f(t)

dla danego a, b, n, jeśli t zmienia się z a na b z krokiem Dt=(b-a)/(n-1).

Podprzykład3() Dim f() As Single Dim a As Single, b As Single, t As Single, dt As Single Dim i As Integer, n As Integer Call read("a1", a) : Call read("b1" , b) : Call read("c1", n) ReDim f(1 To n - 1) dt = (b - a) / (n - 1): t = a Call out("a2", "i") : Call out("b2", "t") : Call out("c2", "f(t)") Dla i = 1 To n - 1 t = t + dt Jeśli t<= -1 Then f(i) = -1 ElseIf t >1 Wtedy f(i) = 1 Else f(i) = t Zakończ, jeśli wywołaj("a" & (2 + i), i): wywołaj("b" & (2 + i), t): wywołaj out("c" & (2 + i), f(i)) Next i End Sub

Konstrukcja Dla każdego. . . Następny

Dla każdej pętli. . . Dalej działa podobnie do pętli For. . . Następnie, ale powtarza grupę instrukcji dla każdego elementu ze zbioru obiektów lub z tablicy, zamiast powtarzać instrukcje określoną liczbę razy. Jest to szczególnie przydatne, gdy nie wiadomo, ile elementów znajduje się w zestawie.

Składnia konstrukcji Dla pętli Każdy. . . Następne jest:

Dla każdego elementu W instrukcjach grupowych Następny element

Podczas korzystania z pętli For Each należy pamiętać o następujących ograniczeniach. . . Następny:

W przypadku zestawów parametr elementu może być tylko zmienną typu wariant, zmienną ogólną typu object lub obiektem wymienionym w Przeglądarce obiektów

W przypadku tablic parametr elementu może być tylko zmienną typu Variant

Nie można używać pętli For Each. . . Następnie z tablicą mającą typ zdefiniowany przez użytkownika, ponieważ zmienna typu wariant nie może zawierać wartości typu zdefiniowanego przez użytkownika

Zrób... Projekt pętli

Za pomocą pętli Do można wykonać blok instrukcji nieograniczoną liczbę razy. Istnieje kilka odmian projektu Do. . . Pętla, ale każdy z nich ocenia wyrażenie warunku, aby określić, kiedy wyjść z pętli. Podobnie jak w przypadku konstrukcji If. . . Wtedy warunek musi być ilością lub wyrażeniem, które przyjmuje wartość Fałsz(null) lub True (nie zero).

W poniższej konstrukcji Do. . . Instrukcje pętli są wykonywane, dopóki wartość warunku ma wartość True:

Wykonaj instrukcje pętli warunkowej

Podczas wykonywania tej pętli VBA najpierw sprawdza warunek. Jeśli warunek ma wartość Fałsz, pomija wszystkie instrukcje pętli. Jeśli ma wartość True, VBA wykonuje instrukcje pętli, powraca do instrukcji Do While i ponownie testuje warunek.

Dlatego pętlę reprezentowaną przez tę konstrukcję można wykonać dowolną liczbę razy, o ile wartość warunku nie jest równa zero lub Prawda. Należy zauważyć, że instrukcje ciała pętli nie są wykonywane ani razu, jeśli przy pierwszym sprawdzeniu warunek okaże się fałszywy.

Rozważmy przykład: Oblicz sumę szeregu

z zadaną dokładnością.

Podprzykład 4() Dim e As Single, x As Single, s As Single Dim m As Single, p As Single, i As Single Call read("a1", x): Call read("b1", e) s = 0 : i = 1: m = 1: p = -1 Call out("a2", "i") : Call out("b2", "m") : Call out("c2", "s") Wykonaj Podczas Abs(m) >= e p = -p * x m = p / i s = s + m Call out("a" & (2 + i), i): Call out("b" & (2 + i), Abs (m)): Call out("c" & (2 + i), s) i = i + 1 Sub End Loop

Kolejna odmiana projektu Do. . . Pętla najpierw wykonuje instrukcje zawarte w treści pętli, a następnie sprawdza warunek po każdym wykonaniu. Ta odmiana gwarantuje, że instrukcje treści pętli zostaną wykonane co najmniej raz:

Wykonaj instrukcje Zapętlaj warunek

Pozostałe dwa warianty konstrukcji pętli są podobne do poprzednich, z tą różnicą, że pętla jest wykonywana, gdy warunek jest fałszywy:

Pętla w ogóle nie jest wykonywana lub jest wykonywana wiele razy:

Wykonaj Do warunku

Operatory pętli

Pętla jest wykonywana co najmniej raz:

operatorzy

Pętla Do warunku

7.2 Zagnieżdżone pętle.

Struktury kontrolne można umieścić wewnątrz innych struktur kontrolnych (na przykład blok If...Then wewnątrz pętli For...Next). Mówi się, że struktura kontrolna umieszczona wewnątrz innej struktury kontrolnej jest zagnieżdżona.

Głębokość zagnieżdżenia struktur kontrolnych w VBA nie jest ograniczona. Aby poprawić czytelność kodu, przyjęto praktykę przesuwania treści konstrukcji decyzyjnej lub pętli w programie, gdy używane są zagnieżdżone struktury sterujące.

Kiedy jedna lub więcej innych pętli jest zagnieżdżonych w pętli, mówimy o pętlach zagnieżdżonych, które rozróżniają pętle zewnętrzne (obejmujące) i wewnętrzne (zagnieżdżone).

Rozważmy przykład sumowania elementów Aij macierzy A(n,m) wiersz po wierszu.

Podprzykład 5() Dim a() jako pojedynczy, s() jako pojedynczy wymiar n jako liczba całkowita, m jako liczba całkowita Dim i jako liczba całkowita, j jako liczba całkowita Call read("a1", n): Call read("b1", m ) ReDim a(1 To n, 1 To m), s(1 To n) "Odczytaj macierz Dla i = 1 To n Dla j = 1 To m Wywołaj readcell(i + 1, j, a(i, j)) Następny j Następny i "Obliczenia Dla i = 1 To n s(i) = 0 Dla j = 1 To m s(i) = s(i) + a(i, j) Następny j Wywołanie outcell(i + 1, m + 1 , s(i)) Następny i Koniec Sub

Należy zauważyć, że pierwsza instrukcja Next zamyka wewnętrzną pętlę For, a ostatnia instrukcja Next zamyka pętla zewnętrzna Dla. Podobnie w przypadku zagnieżdżonych instrukcji If instrukcje End If są automatycznie stosowane w celu zamknięcia najbliższej instrukcji If. Zagnieżdżone struktury Do. . . Pętle działają w podobny sposób: najdalsza instrukcja Loop odpowiada najdalszej instrukcji Do.

Podczas wprowadzania/wyprowadzania elementów tablicy dwuwymiarowej do arkusza Microsoft Excel wygodny w użyciu procedury niestandardowe We/Wy:

Sub readcell(i jako liczba całkowita, j jako liczba całkowita, val jako wariant) val = Sheet1.Cells(i, j).Value End Sub Sub outcells(i jako liczba całkowita, j jako liczba całkowita, val jako wariant) Sheet1.Cells(i, j).Wartość = wartość Koniec Sub

gdzie I to numer wiersza, j to numer kolumny arkusza.

Wyjście ze struktur kontrolnych

Instrukcja Exit umożliwia bezpośrednie wyjście z pętli For, pętli Do, procedury Sub lub Procedury funkcyjne. Składnia instrukcji Exit jest prosta:

For counter = start Aby zakończyć [blok instrukcji] [blok instrukcji] Dalej Wykonaj [(While | Until) warunek] [blok instrukcji] [blok instrukcji] Pętla

Exit For wewnątrz pętli For i Exit Do wewnątrz pętli Do mogą wystąpić dowolną liczbę razy.

Instrukcja Exit Do działa ze wszystkimi odmianami składni pętli Do.

Instrukcje Exit For i Exit Do są używane, gdy chcesz natychmiast zakończyć pętlę, bez konieczności kontynuowania dalszych iteracji lub oczekiwania na zakończenie bloku instrukcji w treści pętli.

Kiedy do wyjścia z pętli użyjesz instrukcji Exit, wartości zmiennej pętli zależą od tego, jak pętla się zakończy:

Kiedy pętla kończy się normalnie, wartość zmiennej pętli jest o jeden większa niż górna granica liczby pętli

Kiedy pętla kończy się przedwcześnie, zmienna pętli zachowuje swoją wartość, którą otrzymała przy użyciu zwykłych zasad

Kiedy pętla kończy się na końcu zestawu, zmienna pętli ma wartość Nothing, jeśli jest to zmienna typu obiekt, lub Pusta, jeśli jest to zmienna typu Variant

Cykl jest strukturą algorytmiczną za pomocą którego realizowane jest wielokrotne powtarzanie bloku operatorów.

Instrukcja pętli z licznikiem (For... Next)

Instrukcja For...Next pozwala na cykliczne wykonanie zestawu instrukcji (operatorów) określoną ilość razy. Składnia instrukcji:

Dla licznik = wartość_początkowa Do wartość_końcowa

[instrukcje]

[instrukcje]

Następny [ lada]

Parametr lada jest zmienną numeryczną, która automatycznie zmienia swoją wartość o krok po każdym powtórzeniu cyklu. Pętla trwa do lada£ wartość_końcowa z dodatnią wartością parametru krok lub do lada³ wartość_końcowa z ujemną wartością parametru krok. Zatem pętla nie zostanie wykonana ani razu, jeśli z dodatnią wartością kroku wartość_początkowa więcej niż wartość_końcowa. Jeśli parametr Krok krok zostanie pominięty, wówczas domyślnie przyrost zmiennej licznika jest ustawiony na 1.

Instrukcja Exit For kończy pętlę „wcześniej” i przekazuje kontrolę do instrukcji następującej po instrukcji pętli. Exit For zwykle znajduje się w operatora warunkowego, Na przykład:

Jeśli stan Następnie wyjdź dla

Notatka. Zgodnie ze składnią operatora For parametr lada– zmienna arytmetyczna dowolnego typu, nadal lepiej jest użyć całego typu zmiennej, gdyż część ułamkowa wartości zmiennej typu rzeczywistego zwykle jest obarczona błędem. Ma to związek ze sposobem przechowywania liczb w komputerze.

Przykład 1

Znajdź sumę pierwszego 10 liczby naturalne: S = 1 + 2 + 3 + …+ 10 . Fragment programu:

Dim I jako liczba całkowita, S jako liczba całkowita

S=0 " Zresetuj wartość zmiennej S

Dla i = 1 do 10 " Początek cyklu. Ustaw wartości początkowe i końcowe
"parametr pętli. Domyślny krok pętli to 1.

S = S + ja " Operator przypisania jest wykonywany za każdym razem
„wykonuję pętlę, w tym przykładzie 10 razy

Następny ja " Koniec cyklu. Wartość parametru pętli zwiększa się o jeden stopień.

W tym fragmencie programu pętla zostanie wykonana dokładnie 10 razy.

Przykład 2

Wyświetl w pierwszej kolumnie arkusza (zaczynając od drugiej linii) wartości x z zakresu od 0 do 3,2 w odstępach co 0,4.

Publiczna karta podrzędna()

Wymiar x jako pojedynczy, i jako liczba całkowita

Dla x = 0 Do 3,2 Krok 0.4

Chociaż długość przedziału jest dokładnie dzielona przez przyrosty co 0,4, wynik w arkuszu jest następujący:

Co robić?

1. Możesz nieznacznie zwiększyć wartość końcową, w tym przykładzie zamiast 3,2 wpisz 3,201.

2. Określ liczbę powtórzeń chicle i zapisz pętlę, korzystając z licznika typu całkowitego.

W w tym przypadku program będzie miał postać:

Publiczna karta podrzędna 1()

Wymiar x jako pojedynczy, i jako liczba całkowita, n jako liczba całkowita

n = CInt((3,2 - 0) / 0,4)

Dla i = 0 Do n Krok 1

Komórki (i + 2, 1) = x

Instrukcja pętli For Each...Next

Pętla For Each...Next umożliwia powtórzenie wykonania grupy instrukcji dla każdego elementu tablicy lub rodziny. Ta instrukcja ma następującą składnię:

Dla każdego element W Grupa

[instrukcje]

[instrukcje]

Następny [ element]

Parametr element to zmienna reprezentująca element rodziny lub tablicy. Argument Grupa– nazwa tablicy lub rodziny. Instrukcje są wykonywane tylko raz dla każdego członka grupy. Korzystanie z instrukcji jest wygodne, ponieważ nie trzeba z góry wiedzieć, ile elementów znajduje się w tablicy lub rodzinie. Zmienny element musi być typu Variant.

Przykład 1

Znajdź średnią arytmetyczną wszystkich elementów wybranego zakresu

Średnia funkcji publicznej (zakres jako zakres) jako podwójna

Przyciemnij element jako wariant

Przyciemniona ilość podwójna

Ilość przyciemniona jako liczba całkowita

Ilość = 0

Dla każdego elementu w zakresie

Kwota = kwota + element

Ilość = ilość + 1

Następny element

Średnia = ilość / ilość

Aplikacja. Wybrany zakres sąsiadujących komórek musi zawierać liczby. Liczby w pustych komórkach uznawane są za 0. Tekst w komórce spowoduje błąd.

Instrukcje If... End If, Select... Case, For... Next, For Each... Next wymienione powyżej to grupa instrukcji sterujących, które zmieniają kolejność wykonywania poleceń. Instrukcje sterujące można zagnieżdżać jedna w drugiej w dowolnej kolejności.

Jeśli zauważysz błąd, zaznacz fragment tekstu i naciśnij Ctrl + Enter
UDZIAŁ: