1. Pętla For Next VBA – informacje podstawowe
Pętla For Next VBA jest kolejną pętlą, którą poznamy. W najprostszej postaci pętla umożliwia nam wprowadzenie z góry liczby powtórzeń instrukcji, która ma zostać wykonana. Dla przykładu spróbujmy wykorzystać naszą pętlę do wyświetlenia tekstu „Przykład pętli For Next” w komórkach od „A1” do „A10” w arkuszu danych Excela.
Sub ForNextExample() Dim intRow As Integer For intRow = 1 To 10 Cells(intRow, 1) = "Przykład pętli For Next" Next End Sub
Sam schemat działania wygląda następująco:
For licznik = start to koniec [Step interwal] [instrukcje] Next [licznik]
- For – słowo kluczowe, rozpoczyna pętle For Next
- Licznik – określa liczbę powtórzeń pętli
- start – Liczba początkowa licznika np 1
- koniec – Liczba końcowa licznika np 10
- [Step interwal] – ustawiamy go opcjonalnie, np gdy chcemy, aby pętla zwiększała się o inną liczbę niż 1 podczas powtórzenia.
- [instrukcje] – Nasz blok kodu, który ma się wykonywać w ramach pętli
- Next – wyraz kończący pętlę
- [licznik] – wyraz opcjonalny. Oznacza tyle, że w ramach pętli zwiększać ma się licznik
2. Przykład pętli For Next
Wiemy już czym jest pętla For Next VBA. Spróbujmy wykonać nieco trudniejszy przykład z wykorzystaniem tej pętli. Naszym zadaniem będzie tak jak w poprzednich przykładach wyświetlenie serii liczb. Będą to liczby parzyste z zakresu od 0 do 100.
Sub ForNextExample2() Dim intCounter As Integer For intCounter = 1 To 100 Step 2 Cells(intCounter, 1) = intCounter - 1 Next End Sub
W przykładzie wyświetliliśmy liczby parzyste z zakresu od 0 do 100. Wykorzystaliśmy także interwał Step w celu zwiększania licznika o 2 za każdym powtórzeniem pętli.Jak widzimy nasze liczby wprowadziły się do arkusza w najprostszy sposób, a więc w co drugą komórkę. Zrobiliśmy tak, by przetestować działanie interwału Step w naszej pętli. Przemodelujmy nasz kod, w ten sposób, by liczby parzyste wyświetliły się w wierszach następujących po sobie.
Sub ForNextExample2() Dim intCounter As Integer For intCounter = 1 To 51 Step 1 Cells(intCounter, 1) = (intCounter - 1) * 2 Next intCounter End Sub
Podobnie jak w przypadku pętli Do Loop, pętlę For Next VBA można zakończyć przed zaplanowanym wykonaniem wskazanym przez licznik. Używamy do tego frazy Exit For.

3. Zadania (Rozwiązanie możesz wpisać w komentarzu)
3.1 Stwórz tabliczkę mnożenia przy użyciu pętli For…Next
3.2 Stwórz prostą tabelkę z użyciem pętli For…Next, która generuje listę osób w formie osoba1, osoba2, osoba3 …itp. W drugiej kolumnie za pomocą funkcji RND() i pętli dopisz wiek osoby z przedziału 18 – 65. Lista powinna zawierać 50 pozycji.
14 komentarzy “Pętla For Next w Excel VBA”
Ktoś zrobi przykład z tabliczką mnożenia?
Sub PetlaForNextZadanie1()
'3.1 Stwórz tabliczkę mnożenia przy użyciu pętli For…Next
Dim intRow As Integer
Dim intColumn As Integer
For intColumn = 1 To 10
For intRow = 1 To 10
Cells(intRow, intColumn) = intRow * intColumn
Next
Next
End Sub
Dzięki Iza za odpowiedź, dokładnie tak jak piszesz 🙂
3.2
Sub petlaa()
Dim i As Integer,
For i = 1 To 50
Cells(i, 1) = „osoba ” & i
Cells(i, 2) = Rnd(18.65)
Next
End Sub
Takie cudo wyskrobalem
Sub Ludzie()
Dim intCounter As Integer
Dim intColumn As Integer
Dim intRow As Integer
'wstawiamy naglówki kolumn
Cells(1, 1) = „Osoba”
Cells(1, 2) = „Wiek”
intCounter = 1
For intRow = 1 To 50
Cells(intRow + 1, 1) = „osoba” & intCounter * intRow
Next
intCounter = 1
intRow = 0
For intRow = 1 To 50
Cells(intRow + 1, 2) = Int((65 – 18 + 1) * Rnd + 18) 'Calkowita liczba losowa od 90kdo 100k
Next
End Sub
Sub osoby_wiek()
Dim intRow As Integer
Dim intwiek As Integer
Cells(1, 1) = „Osoba”
Cells(1, 2) = „Wiek”
For intRow = 2 To 51
Cells(intRow, 1) = „Osoba” & intRow – 1
Cells(intRow, 2) = Int(Rnd * (65 – 18) + 18)
Next
End Sub
Sub lista_osob()
Dim lista As Byte
Dim wiek As Byte
For lista = 1 To 50
Cells(lista, 1) = „osoba” & lista
wiek = 1
Do Until wiek >= 18 And wiek <= 65
wiek = Fix(Rnd() * 100)
Cells(lista, 2) = wiek
Loop
Next
End Sub
Sub osobywiek()
Dim i As Integer
For i = 1 To 50
Cells(i, 1) = „osoba” & i
Cells(i, 2) = Int(18 + 47 * Rnd())
Next
End Sub
Sub tabliczka_mnozenia()
Dim a As Integer
Dim b As Integer
For a = 1 To 10
For b = 1 To 10
Cells(a, b) = a * b
Next
Next
End Sub
Sub procka2()
Dim counter As Integer
For counter = 1 To 50
Cells(counter, 1) = „osoba” & counter
Cells(counter, 1).Select
ActiveCell.Offset(0, 1).Value = WorksheetFunction.RandBetween(18, 65)
Next counter
End Sub
Sub NextForExample3_2()
Dim intLicznk As Integer
Cells(1, 1) = „Lista Osób”
Cells(1, 2) = „Wiek Osoby”
For intLicznik = 1 To 50
Cells(intLicznik + 1, 1) = „Osoba” & intLicznik
Cells(intLicznik + 1, 2) = 18 + Round((65 – 18) * Rnd())
Next
End Sub
Zrobiłem to zadanie z wykorzystaniem jednej pętli. Mam pytanie, czy takie podejście jest prawidłowe, czy raczej powinienem robić osobną pętlę do każdej kolumny, skoro jest to kolejne działanie?
zad. 1
zad. 2
Sub tabliczka_mnozenia3()
Dim intRow As Integer
Dim intCol As Integer
For intCol = 1 To 10
For intRow = 1 To 10
Cells(intRow, intCol) = intRow * intCol
Next
Next
End Sub
Sub lista_zadanie_3_2()
Dim intRow As Integer
Dim intAge As Integer
For intRow = 1 To 50
Cells(intRow, 1) = „Osoba ” & intRow
Cells(intRow, 2) = WorksheetFunction.RandBetween(18, 65)
Next
End Sub