1. Wprowadzenie do pętli w Excel VBA
Pętle są najmocniejszym elementem języków programowania. To właśnie za ich pomocą możemy automatyzować działania, przyspieszać pracę naszych programów, robić rzeczy, których nie moglibyśmy zrobić w arkuszu danych Excela. Sama pętla jak jej nazwa wskazuje służy do tzw. zapętlania, a więc wykonywania jakiejś operacji wiele razy. W VBA w Excelu wyróżniamy 3 główne rodzaje pętli While…Wend, Do…Loop oraz For…Next. Wszystkie wymienione pętle VBA poznamy w dalszej części szkolenia. W tym rozdziale zajmiemy się podstawowym opisem pętli While…Wend oraz jej zastosowaniem.

2. Działanie przykładowej pętli – Jak napisać pętlę w VBA
Pętle VBA, które najczęściej będziemy stosować w naszym kodzie bazować będą na następującym schemacie:
While [Warunki] [Instrukcje] Wend
Lub też
Do While [Warunki] [Instrukcje] Loop
Sama interpretacja kodu oznacza dla nas tyle, co: Wykonuj instrukcje, jeżeli spełniony jest opisany warunek. Zróbmy na tej podstawie prosty przykład. Wykorzystując pętlę While…Wend wypełnijmy na początek 100 pierwszych wierszy naszego arkusza Excel dowolną wartością np „tak działa pętla”. Do dzieła!
Sub WhileWendExample() Dim intCounter As Integer intCounter = 1 While intCounter <= 100 Cells(intCounter, 1) = "tak działa pętla" intCounter = intCounter + 1 Wend End Sub
Opis przykładu:
Stworzyliśmy właśnie nasz pierwszy program z wykorzystaniem pętli. Spróbujmy opisać, co tak właściwie po kolei zostało wykonane:
- Stworzyliśmy program o nawie WhileWendExample
- Zadeklarowaliśmy jawną zmienną o nazwie intCounter, która jest naszym licznikiem
- Ustawiliśmy dla naszej zmiennej wartość 1. To ważne, gdyż wartość default to 0, co oznacza, że bez tego bloku chcielibyśmy w pierwszej kolejności wypełnić komórkę „A0”, której jak wiemy w naszym arkuszu nie ma.
- Ustawiliśmy warunek, by pętla wykonywała się, gdy licznik intCounter jest mniejszy lub równy 100.
- Odwołaliśmy się w instrukcji do komórki „A1” poprzez polecenie Cells(intCounter, 1), co przy naszej początkowej wartości licznika intCounter oznacza tyle, co Cells(1, 1). Wypełniliśmy w ten sposób komórkę „A1”.
- Częścią instrukcji intCounter = intCounter + 1 zwiększamy wartość licznika o 1 przy każdorazowym działaniu pętli. Pętla wykonuje się w tym wypadku 100 razy do momentu uzyskania wartości niespełniającej warunku <=100. Następuje wyjście z pętli.
W naszym przykładzie wprowadziliśmy jedną zmienną. To właśnie instrukcja dotycząca tej zmiennej liczbowej została „zapętlona”. Zmodyfikujmy nasz program. Zamiast frazy „tak działa pętla” wprowadźmy do komórek wartość licznika intCounter. W ten sposób nasz program wypełni 100 kolejnych komórek w kolumnie „A” liczbami od 1 do 100.
Sub LoopExample() Dim intCounter As Integer intCounter = 1 While intCounter <= 100 Cells(intCounter, 1) = intCounter intCounter = intCounter + 1 Wend End Sub
3. Zadania (Rozwiązanie możesz wpisać w komentarzu)
3.1 Analogicznie do przykładu wypełnij kolumny liczbami od 1 do 100.
3.2 Przy pomocy pętli wprowadź do arkusza liczby od 1 do 10, tak, aby co drugi wiersz był wypełniony.
7 komentarzy “Wprowadzenie do pętli w Excel VBA”
Kolumny:
Sub LoopExample()
Dim intCounter As Integer
intCounter = 1
While intCounter <= 100
Cells(1, intCounter) = intCounter
intCounter = intCounter + 1
Wend
End Sub
Zadanie 2:
Sub zapętlamy2()
Dim intCounter As Integer
Dim intCounter2 As Integer
intCounter = 1
intCounter2 = 1
Do While intCounter2 <= 10
Cells(intCounter, 1) = intCounter2
intCounter = intCounter + 2
intCounter2 = intCounter2 + 1
Loop
End Sub
Sub LoopExample_2() 'zadanie z końca
Dim intCounter As Integer
intCounter = 1
While intCounter <= 10
Cells(intCounter * 2 – 1, 1) = intCounter
intCounter = intCounter + 1
Wend
End Sub
3.1
Option Explicit
Sub PetleWprowadzenie2()
Dim intCounter As Integer
intCounter = 1
While intCounter <= 100
Cells(1, intCounter) = intCounter
intCounter = intCounter + 1
Wend
End Sub
3.2
Dim intRow As Integer
intCounter = 1
intRow = 1
While intCounter <= 10
Cells(intRow, 1) = intCounter
intCounter = intCounter + 1
intRow = intRow + 2
Wend
End Sub
Sub Example2()
Dim intCounter As Integer
intCounter = 1
While intCounter <= 100
If intCounter / 2 = Round(intCounter / 2) Then
Cells(intCounter, 1) = intCounter
intCounter = intCounter + 1
Else
intCounter = intCounter + 1
End If
Wend
End Sub
Sub WhileWendExample()
Dim intCounter As Integer
intCounter = 2
While intCounter <= 10
Cells(intCounter, 1) = 1
intCounter = intCounter + 2
Wend
End Sub
Sub WhileWendExample1()
Dim intCounter As Integer
intCounter = 1
While intCounter <= 10
Cells(1, intCounter) = 1
intCounter = intCounter + 1
Wend
End Sub
Sub petla_While()
Dim intCounter As Integer
intCounter = 1
intCounter2 = 1
While intCounter2 <= 10
Cells(intCounter, 1) = intCounter2
intCounter = intCounter + 2
intCounter2 = intCounter2 + 1
Wend
End Sub