Pętle w VBA

Zdarzają się sytuacje, w których program VBA musi wykonać ten sam zestaw działań kilka razy z rzędu (czyli kilkakrotnie powtórzyć ten sam blok kodu). Można to zrobić za pomocą pętli VBA.

Pętle VBA obejmują:

Następnie przyjrzymy się bliżej każdemu z tych cykli.

Dla operatora pętli w Visual Basic

Struktura operatora pętli Połączenia w Visual Basic można zorganizować w jednej z dwóch form: jako pętlę W następnym lub jako pętla Dla każdego.

Cykl „Dla … Dalej”

Cykl W następnym wykorzystuje zmienną, która sekwencyjnie przyjmuje wartości z danego zakresu. Przy każdej zmianie wartości zmiennej wykonywane są akcje zawarte w ciele cyklu. Łatwo to zrozumieć na prostym przykładzie:

Dla i = 1 do 10 Razem = Razem + iArray(i) Dalej i

W tej prostej pętli W następnym zmienna jest używana i, który kolejno przyjmuje wartości 1, 2, 3, … 10 i dla każdej z tych wartości wykonywany jest kod VBA wewnątrz pętli. W ten sposób ta pętla sumuje elementy tablicy. iTablica w zmiennej Kwota produktów:.

W powyższym przykładzie przyrost pętli nie jest określony, więc aby zwiększyć zmienną i od 1 do 10, domyślnie jest to przyrost 1… Jednak w niektórych przypadkach konieczne jest zastosowanie różnych wartości przyrostu dla pętli. Można to zrobić za pomocą słowa kluczowego Ewolucja krok po krokujak pokazano w poniższym prostym przykładzie.

Dla d = 0 do 10 Krok 0.1 dTotal = dTotal + d Dalej d

Ponieważ w powyższym przykładzie krok przyrostu jest ustawiony na 0.1, to zmienna dRazem za każde powtórzenie cyklu przyjmuje wartości 0.0, 0.1, 0.2, 0.3,… 9.9, 10.0.

Aby określić krok pętli w VBA, możesz użyć wartości ujemnej, na przykład tak:

Dla i = 10 do 1 Krok -1 iArray(i) = i Następny i

Tutaj przyrost jest -1, więc zmienna i z każdym powtórzeniem cyklu przyjmuje wartości 10, 9, 8, … 1.

Pętla „dla każdego”

Cykl Dla każdego podobny do cyklu W następnym, ale zamiast iterowania po sekwencji wartości dla zmiennej licznika, pętla Dla każdego wykonuje zestaw akcji dla każdego obiektu w określonej grupie obiektów. W poniższym przykładzie za pomocą pętli Dla każdego wylicza wszystkie arkusze w bieżącym skoroszycie programu Excel:

Dim wSheet As Worksheet dla każdego arkusza w Arkuszach MsgBox "Найден лист: " & wSheet.Name Następny wSheet

Instrukcja przerwania pętli „Exit For”

Operator Wyjdź dla służy do przerywania cyklu. Gdy tylko ta instrukcja zostanie napotkana w kodzie, program kończy wykonywanie pętli i przechodzi do wykonywania instrukcji znajdujących się w kodzie bezpośrednio po tej pętli. Można to wykorzystać na przykład do wyszukania określonej wartości w tablicy. W tym celu za pomocą pętli skanowany jest każdy element tablicy. Po znalezieniu wymaganego elementu nie ma potrzeby przeglądania pozostałych – cykl zostaje przerwany.

Aplikacja operatora Wyjdź dla pokazano w poniższym przykładzie. Tutaj pętla iteruje ponad 100 wpisów tablicy i porównuje każdy z wartością zmiennej dWart… Jeśli zostanie znalezione dopasowanie, pętla zostaje zakończona:

For i = 1 do 100 Jeśli dValues(i) = dVal Then IndexVal = i Exit For End If Next i

Pętla Do While w Visual Basic

Cykl Zrób chwilę wykonuje blok kodu, o ile spełniony jest określony warunek. Poniżej znajduje się przykład procedury Podłoże, w którym za pomocą pętli Zrób chwilę Liczby Fibonacciego nieprzekraczające 1000 są wyświetlane kolejno:

'Sub procedura wyprowadza liczby Fibonacciego nieprzekraczające 1000 Sub Fibonacci() Dim i As Integer 'licznik wskazujący pozycję elementu w ciągu Dim iFib As Integer' przechowuje aktualną wartość ciągu Dim iFib_Next As Integer 'przechowuje następną wartość sekwencji Dim iStep As Integer 'przechowuje rozmiar następnego przyrostu' inicjalizuj zmienne i oraz iFib_Next i = 1 iFib_Next = 0 'Do While pętla będzie wykonywana dopóki wartość 'bieżącej liczby Fibonacciego nie będzie większa niż 1000 Do While iFib_Next < 1000 If i = 1 Wtedy 'specjalny przypadek dla pierwszego elementu iStep = 1 iFib = 0 Else' zapisz rozmiar następnego przyrostu przed nadpisaniem 'bieżąca wartość ciągu iStep = iFib iFib = iFib_Next End If 'wypisz aktualną liczbę Fibonacciego w kolumnie A aktywny arkusz 'w wierszu o indeksie i Komórki(i , 1).Value = iFib' oblicz kolejną liczbę Fibonacciego i zwiększ indeks pozycji elementu o 1 iFib_Next = iFib + iStep i = i + 1 Loop End Sub

W podanym przykładzie warunek iFib_Next < 1000 sprawdzane na początku pętli. Dlatego, jeśli pierwsza wartość iFib_Dalej Gdyby było ich więcej niż 1000, pętla nigdy nie zostałaby wykonana.

Inny sposób na zaimplementowanie pętli Zrób chwilę - umieść warunek nie na początku, ale na końcu pętli. W takim przypadku pętla zostanie wykonana przynajmniej raz, niezależnie od tego, czy warunek jest spełniony.

Schematycznie taki cykl Zrób chwilę z warunkiem do sprawdzenia na końcu będzie wyglądać tak:

Wykonaj... Pętla, podczas gdy iFib_Next < 1000

икл «Do czasu» w Visual Basic

Cykl Rób dopóki bardzo podobny do cyklu Zrób chwilę: blok kodu w ciele pętli jest wykonywany w kółko aż do spełnienia określonego warunku (wynikiem wyrażenia warunkowego jest Prawdziwy). W następnej procedurze Podłoże za pomocą cyklu Rób dopóki pobrać wartości ze wszystkich komórek w kolumnie A arkusz, aż kolumna napotka pustą komórkę:

iRow = 1 Do Until IsEmpty(Cells(iRow, 1)) 'Wartość bieżącej komórki jest przechowywana w tablicy dCellValues ​​​​dCellValues(iRow) = Cells(iRow, 1). Wartość iRow = iRow + 1 pętla

W powyższym przykładzie warunek Jest pusty(komórki(iRow, 1)) znajduje się na początku konstrukcji Rób dopóki, więc pętla zostanie wykonana przynajmniej raz, jeśli pierwsza pobrana komórka nie będzie pusta.

Jednak, jak pokazano w przykładach pętli Zrób chwilę, w niektórych sytuacjach konieczne jest wykonanie pętli przynajmniej raz, niezależnie od początkowego wyniku wyrażenia warunkowego. W takim przypadku wyrażenie warunkowe należy umieścić na końcu pętli, tak jak to:

Wykonaj... Pętla aż do opróżnienia(komórki(iRow, 1))

Dodaj komentarz