Jeśli piszesz program VBA i chcesz wielokrotnie wykonywać to samo zadanie, możesz to zrobić za pomocą pętli VBA for. VBA to sekwencyjny język programowania. Każda linia kodu jest wykonywana od góry do dołu, dopóki nie będzie więcej linii kodu do odczytania. Jeśli chcesz się cofnąć i wykonać zadanie, musisz wymusić za pomocą kodu makra. Otrzymujesz wyniki z pętlą.
Pętla For w VBA jest jednym z najczęstszych typów pętli. Pętla For ma dwie formy: For Next i For Each In Next. Pętla For jest zwykle używana do sekwencyjnego poruszania się po liście elementów lub liczb. Aby zakończyć pętlę For w dowolnym punkcie, możemy użyć instrukcji exit. For Loop będzie się kręcić w kółko, aż spełni warunek końcowy. Gdy warunek końcowy zostanie spełniony, programowanie będzie kontynuowane w dół, w swoim naturalnym kierunku.
Pętla For… Next ma następującą składnię: For counter = start_counter To end_counter 'Zrób coś tutaj (swój kod) Next counter
Właściwie tworzymy pętlę, która używa zmiennej licznik jako „strażnik czasu” pętli. Ustawiamy go na wartość równą start_counter na początku pętli, a następnie zwiększaj ją o 1 podczas każdej pętli, aż spełni warunek końcowy. Pętla będzie wykonywana do czasu, gdy wartość licznik staje się równy licznik_końcowy. Pętla jest wykonywana po raz ostatni, gdy obie powyższe wartości są zgodne, a następnie pętla się zatrzymuje.
Wszystkie powyższe mogą być mylące dla niektórych osób, więc przygotujmy się i zacznijmy uczyć się For Loop w programie Excel z kilkoma przykładami.
- Utwórz nowy skoroszyt programu Excel, a następnie zapisz go z rozszerzeniem .xlsm
- Aby uruchomić ekran edytora Visual Basic, użyj ALT + F11
- Wstaw nowy moduł
- Skopiuj poniższy kod w standardowym module VB
Pętla 1 (Wyświetlanie numeru z msgbox)
Sub Loop1() Dim StartNumber As Integer Dim EndNumber As Integer EndNumber = 5 For StartNumber = 1 To EndNumber MsgBox StartNumber & " is " & "Your StartNumber" Next StartNumber End Sub
Wyjaśnienie kodu:
- Kod VBA wymaga przypisania wartości do StartNumber, gdzie EndNumber to zmienne, które są zadeklarowane jako liczby całkowite jako punkt początkowy pętli
- Te wartości mogą być dowolną liczbą i mamy EndNumber jako 5
- StartNumber zaczyna się od 1
- Dla StartNumber = 1 To EndNumber oznacza, że kod rozpocznie się od 1 (StartNumber) do 5 (EndNumber)
- MsgBox StartNumber & " is " & "Twój StartNumber" wyświetli następujący komunikat
Pętla 2 (wypełnij wartości)
Sub Loop2() 'Wypełnia komórki A1:A56 wartościami X przez pętlę' --- Comment 'Zwiększ wartość X o 1 w każdej pętli' --- Komentarz Dim X As Integer For X = 1 To 56 Range("A " & X). Wartość = X Dalej X Koniec Sub
Wyjaśnienie kodu:
- Przypisaliśmy X jako liczbę całkowitą
- Dla X = 1 do 56; zacznie się od 1 i będzie kontynuowane do 56 z przyrostem o 1 za każdym razem
- Zakres("A" & X).Wartość = X; ta linia przechowa wartość X i przejdzie do zakresu od A1 do A56
Loop3 (Wypełnij komórki kolorem tła)
Sub Loop3() ' Wypełnia komórki B1:B56 56 kolorami tła' --- Komentarz Dim X As Integer For X = 1 do 56 Range("B" i X).Wybierz With Selection.Interior .ColorIndex = X .Pattern = xlSolidny koniec z następnym X End Sub
Wyjaśnienie kodu:
- Przypisaliśmy X jako liczbę całkowitą
- Dla X = 1 do 56 rozpocznie się od 1 i będzie kontynuowane do 56 z przyrostem o 1 za każdym razem
- Zakres("B" i X).Wybierz; ta linia będzie przechowywać wartość X i wybierz komórkę od B1 do B56
- Następne 4 wiersze, tj. Z Selection.Interior, wybierze wewnętrzny indeks koloru i pobierze wartość z X tego indeksu koloru, tak że 1 należy do koloru czarnego; 2 należy do koloru białego; 3 dla czerwonego i tak dalej
Pętla 4 (wypełnij wartości z przyrostem 2)
Domyślnie wartość kroku wynosi 1 do przodu, jednak można ją ustawić na liczbę większą niż 1.
Sub Loop4() ' Wypełnia co drugą komórkę z C1:C50 wartościami X' --- Komentarz Dim X As Integer For X = 1 do 50 Step 2 Range("C" & X).Value = X Next X End Sub
Wyjaśnienie kodu:
- Przypisaliśmy X jako liczbę całkowitą
- Dla X = 1 do 50 Krok 2; zacznie się od 1 w X do 50 z przyrostem o 2 za każdym razem
- Zakres("C" & X).Wartość = X; ta linia przechowa wartość X i przejdzie do zakresu od C1 do C50
Pętla 5 (VBA For Loop in Reverse z instrukcją STEP)
Nie jest konieczne, aby licznik w pętli For przesuwał się tylko od wartości niskich do wyższych; zamiast tego pętla For może działać wstecz, tj. od wysokich do niższych wartości.
Mimo że wartość kroku jest domyślnie równa 1 do przodu, można ją jednak ustawić na liczbę w odwrotnej kolejności.
Sub Loop5() ' Wypełnia komórki z D1:D50 wartościami X' --- Komentarz ' W tym przypadku X zmniejsza się o 1' --- Komentarz Dim X As Integer, Row As Integer Row = 1 Dla X = 50 do 0 Krok -1 Zakres ("D" i wiersz). Wartość = X wiersz = wiersz + 1 następny X End Sub
Wyjaśnienie kodu:
- Przypisaliśmy X i Row jako liczbę całkowitą
- Wiersz zawiera wartość 1
- Dla X = 50 do 0 Krok -1; zacznie się od 50 z dekrementacją o 1 w X do 0
- Zakres("D" &wiersz).Wartość = X; ta linia przechowa wartość X i przejdzie do zakresu od D1 do D50
Pętla 6 (wypełnia co drugą komórkę w odwrotnej kolejności za pomocą STEP-2)
W powyższym przykładzie pętli For możemy użyć kroku i kolejności, aby sprawdzić, czy pętla For działa w kierunku do przodu, czy do tyłu.
Sub Loop6() ' Wypełnia co drugą komórkę z E1:E100 wartościami X' --- Komentarz ' W tym przypadku X zmniejsza się o 2' --- Komentarz Dim X As Integer, Row As Integer Row = 1 For X = 100 Do 0 Krok -2 Zakres("E" i Rząd). Wartość = X Rząd = Rząd + 2 Dalej X Koniec Sub
Wyjaśnienie kodu:
- Przypisaliśmy X i Row jako liczbę całkowitą
- Wiersz zawiera wartość 1
- Dla X = 100 do 0 Krok -2; zacznie się od 100 z dekrementacją o 2 w X do 0
- Zakres("E" &wiersz).Value = X; ta linia przechowa wartość X i przejdzie do zakresu od E1 do E100
Pętla 7 (dla pętli z warunkiem JEŻELI: Wypełnia komórki zaczynając od określonej komórki)
Spowoduje to wypełnienie komórek z komórki F11 wartością 11, aż X spełni warunek JEŻELI
Sub Loop7() ' Rozpoczyna wypełnianie komórek F11:F100 wartościami X' --- Comment ' Wyjście z pętli po 50' --- Comment Dim X As Integer For X = 11 To 100 Range("F" & X).Value = X Jeśli X = 50 Następnie MsgBox ("Bye Bye") Exit For End If Next X End Sub
Wyjaśnienie kodu:
- Przypisaliśmy X jako liczbę całkowitą
- Dla X = 11 do 100; rozpocznie się od 11 z przyrostem o 1 w X aż do spełnienia warunku
- Zakres("F" &X).Wartość = X; ta linia przechowa wartość X i przejdzie do zakresu F11, dopóki warunek nie zostanie spełniony
- Po wprowadzeniu wartości 50 w komórce F50 zostanie wyświetlony następujący komunikat:
Wniosek: Z powyższych 7 przykładów możemy zastosować pętlę For w naszej zwykłej lub dowolnej części automatyzacji.
Jeśli podobały Ci się nasze blogi, podziel się nimi ze znajomymi na Facebooku. A także możesz śledzić nas na Twitterze i Facebooku.
Chcielibyśmy usłyszeć od Ciebie, daj nam znać, jak możemy ulepszyć, uzupełnić lub unowocześnić naszą pracę i uczynić ją lepszą dla Ciebie. Napisz do nas na stronie e-mail