Pętla Do Loop w Excel VBA 5


1. Schemat działania pętli Do While Loop

Pętla While…Wend, którą poznaliśmy w poprzednim rozdziale jest najprostszą pętlą w Excelowym VBA. Pętla, która daje nam więcej możliwości to Do…Loop. Daje nam ona wiele więcej możliwości. Możemy np zakończyć wykonywanie instrukcji wcześniej, poprzez wprowadzenie warunku wyjścia. Nasza kontrola nad wykonywaniem instrukcji jest znacznie większa. Poniżej podstawowy schemat pętli Do…Loop:

2. Rodzaje pętli Do…Loop

Pętle Do…Loop możemy podzielić na 5 kategorii. Ich dokładny opis zamieszczam w tabelce poniżej.

Rodzaj pętliOpis
Do While LoopPętla z warunkiem wejścia. Pętla Do While Loop uruchamia się po raz pierwszy, gdy warunek jest spełniony. Oznacza to tyle co “odtwarzaj instrukcję gdy warunek jest spełniony”.
Do Until LoopPętla z warunkiem wyjścia. Pętla uruchamia się po raz pierwszy i działa do momentu, aż warunek zostanie spełniony. Oznacza to tyle co “odtwarzaj instrukcję, dopóki warunek zostanie spełniony”. Gdy warunek zostanie spełniony następuje wyjście z pętli
Do Loop WhilePętla z warunkiem wejścia. Pętla uruchamia się i wykonuje 1 raz, po czym następuje sprawdzenie, czy instrukcja może wejść w pętlę po raz kolejny. Gdy warunek jest spełniony pętla uruchomi się po raz kolejny.
Do Loop UntilPętla z warunkiem wyjścia. Pętla uruchamia się i wykonuje 1 raz, po czym następuje sprawdzenie, czy instrukcja może wejść w pętlę po raz kolejny. Gdy warunek jest spełniony nastąpi wyjście z pętli.
Do LoopPętla bez określonego warunku. Możemy ją zatrzymać np przy pomocy instrukcji Exit Loop oraz instrukcji If Then Else.

Naszą pętlę możemy zakończyć przed spełnieniem warunku. Służy do tego instrukcja Exit Do. Używamy jej np, gdy chcemy, by jeszcze jakiś dodatkowy warunek mógł zakończyć pętle. Warunek, którego nie napisaliśmy  po While lub Until.

3. Przykład pętli w pętli

Spróbujmy zrobić w naszym arkuszu VBA prostą tabliczkę mnożenia. Wykorzystamy do tego celu poznane nam pętle Do Until Loop i Do loop Until. W pierwszej kolejności stwórzmy prostą pętlę, wypełniającą nam 10 kolumn pierwszego wiersza w naszym arkuszu:

W powyższym przykładzie celowo wprowadziliśmy od razu obie zmienne dla kolumn i wierszy. Wykorzystamy je w pełni kończąc nasz przykład. Gdy mamy już makro wypełniające pierwszy wiersz, zapętlamy je powiększając za każdym razem licznik dla wierszy o 1. W ten sposób w naszym arkuszu utworzy się tabliczka mnożenia do 100.

4. Przykład wykorzystania pętli

W przykładzie z użyciem pętli stworzymy prostą bazę osób. Po stworzeniu bazy zajmiemy się analizą danych z użyciem poznanych wcześniej funkcji i możliwości VBA. Na początek stwórzmy prostą tabelę, w której naszymi kolumnami będą Liczba porządkowa, numer indeksu, data egzaminu, wynik egzaminu, ocena słowna. Dodatkowo kolumnę Liczby porządkowej  wypełnijmy kolejno liczbami od 1 do 30.

Kurs Excel VBA - Pętla Do Loop

Kurs Excel VBA – Pętla Do Loop

W ten sposób uzyskaliśmy prostą tabelkę do której możemy wprowadzać dane. W następnej kolejności przy użyciu funkcji generowania liczb losowych zmodyfikujmy nasz skrypt, tak aby:

  • Kolumna Numer Indeksu była wypełniona liczbami losowymi z przedział od 90000 do 100000
  • Kolumna Data egzaminu była wypełniona datą z dnia dzisiejszego – 10 dni
  • Kolumna Wynik egzaminu zawierała liczby losowe od 1 do 100
  • Dane zawarte w kolumnie Ocena słowna powinny odnosić się do wyników w następujący sposób: wyniki od 0 do 33 otrzymują wartość “Poprawka”. Wartości od 34 do 67 otrzymują wartość “Zdał”. Wartości większe od  67 otrzymują wartość “Zdał z wyróżnieniem”.

Liczby losowe tworzymy przy wykorzystaniu funkcji RND(). Możemy w ten sposób wygenerować liczby losowe z przedziału od 0 do 1. Wylosowaną liczbę możemy zamienić na liczby całkowite używając funkcji INT(). Funkcje te są bardziej szczegółowo opisane w artykule o funkcjach matematycznych VBA. Do dzieła !

Plik z rozwiązaniem zadania zamieszczam poniżej:

Kurs_excel_vba_baza_osob

5. Zadania (Rozwiązanie możesz wpisać w komentarzu)

5.1 Stwórz tabliczkę mnożenia z wykorzystaniem pętli Do While Loop.

5.2 Przy użyciu pętli wylistuj w arkuszu wszystkie liczby parzyste od 0 do 100.

5.3 Przy użyciu pętli wylistuj wszystkie liczby z zakresu od 0 do 100 podzielne przez 4.

5.4 Zmodyfikuj przykład z bazą osób dodając kolor w kolumnie nr 5. W zależności od wyniku egzaminu wynikowi Zdał odpowiada kolor żółty, wynikowi poprawka kolor czerwony. Dla wyniku Zdał z wyróżnieniem przypisz kolor zielony.


Dodaj komentarz

Twój adres email nie zostanie opublikowany.

5 komentarzy do “Pętla Do Loop w Excel VBA

  • PLNY

    zadanie 2 proszę:
    Option Explicit
    Sub PetlaPrzyklad()
    ‘pętla wyświetlająca liczby parzyste od 0 do 100 w arkuszu
    Dim intLicznik As Integer
    intLicznik = 0
    While intLicznik <= 50
    Cells(intLicznik + 1, 1) = intLicznik * 2
    intLicznik = intLicznik + 1
    Wend
    End Sub

  • GreG

    Zad 2.
    Sub ListowanieParzyste()

    Dim intRow As Integer
    Dim intVal As Integer

    intRow = 1
    intVal = 0

    Do Until intVal > 100
    Cells(intRow, 1) = intVal
    intRow = intRow + 1
    intVal = intVal + 2
    Loop

    End Sub

    Zad 3.
    Sub ListowanieDzielnePrzez4()

    Dim intRow As Integer
    Dim intVal As Integer

    intRow = 1
    intVal = 4

    Do Until intVal > 100
    Cells(intRow, 1) = intVal
    intRow = intRow + 1
    intVal = intVal + 4
    Loop

    End Sub

  • Pawel

    Sub Loop4()
    Dim intRow As Integer
    Dim intLicznik As Integer
    intRow = 1
    intLicznik = 1

    Do While intLicznik <= 100
    If intLicznik Mod 4 = 0 Then
    Cells(intRow, 1) = intLicznik
    intRow = intRow + 1
    Else

    End If
    intLicznik = intLicznik + 1
    Loop
    End Sub

  • robaldo

    Mam pytanie odnośnie tabliczki mnożenia. Dlaczego jeśli zadeklarujemy intCol=1 przed wejściem do pierwszej pętli to wyświetla się tylko pierwszy wiersz mnożenia?

  • Marcin

    5.1

     

    Option Explicit

    Sub LoopZadanie5_1()

    Dim intRow As Integer
    Dim intCol As Integer

    intRow = 1
    intCol = 1

    Do While intRow <= 10

    Do While intCol <= 10

    Cells(intRow, intCol) = intRow * intCol

    intCol = intCol + 1

    Loop

    intRow = intRow + 1

    intCol = 1

    Loop

    End Sub

     

    5.2

     

    Option Explicit

    Sub LoopZadanie5_2()

    Dim intCounter As Integer
    Dim intRow As Integer

    intCounter = 0
    intRow = 1

    Do While intCounter <= 100
    Cells(intRow, 1) = intCounter
    intCounter = intCounter + 2
    intRow = intRow + 1
    Loop

    End Sub

     

    5.3

     

    Option Explicit

    Sub LoopZadanie5_3()

    Dim intCounter As Integer
    Dim intRow As Integer

    intRow = 1
    intCounter = 4

    Do While intCounter <= 100
    Cells(intRow, 1) = intCounter
    intRow = intRow + 1
    intCounter = intCounter + 4
    Loop

    End Sub

     

    5.4

     

    Option Explicit

    Sub LoopZadanie5_4()

    Dim intCounter As Integer
    Dim intColumn As Integer
    Dim intRow As Integer

    ‘Nagłówki tabeli
    Cells(1, 1) = “Liczba porządkowa”
    Cells(1, 2) = “Numer indeksu”
    Cells(1, 3) = “Data egzaminu”
    Cells(1, 4) = “Wynik egzaminu”
    Cells(1, 5) = “Ocena słowna”

    intCounter = 1
    intColumn = 1

    ‘Ustawienie liczb porządkowych
    Do While intCounter <= 30

    Cells(intRow + 2, 1) = intCounter
    intCounter = intCounter + 1
    intRow = intRow + 1

    Loop

    ‘przypisanie wartości początkowych zmiennym DIM
    intCounter = 1
    intRow = 0

    ‘wypełnienie numerów indeksu losowymi liczbami
    Do While intCounter < Application.WorksheetFunction.CountA(Range(“A:A”))

    Cells(intRow + 2, 2) = Int(90000 + Rnd() * 10000)

    intCounter = intCounter + 1
    intRow = intRow + 1

    Loop

    ‘ustawienie parametrów początkowych zmiennych DIM
    intCounter = 1
    intRow = 0

    ‘Wpisanie daty egzaminu
    Do While intCounter < Application.WorksheetFunction.CountA(Range(“A:A”))

    Cells(intRow + 2, 3) = Date – 10

    intCounter = intCounter + 1
    intRow = intRow + 1

    Loop

    ‘ustawiamy początkowe wartości parametrów
    intCounter = 1
    intRow = 0

    ‘generujemy losowy wynik egzaminu dla danego numeru indeksu
    Do While intCounter < Application.WorksheetFunction.CountA(Range(“A:A”))
    Cells(intRow + 2, 4) = Int(Rnd() * 100)

    intCounter = intCounter + 1
    intRow = intRow + 1
    Loop

    ‘ustawiamy wartości początkowe parametrówł
    intCounter = 1
    intRow = 0

    ‘przypisujemy słowna ocenę wyniku egzaminu
    Do While intCounter < Application.WorksheetFunction.CountA(Range(“A:A”))

    If Cells(intRow + 2, 4) <= 33 Then
    Cells(intRow + 2, 5) = “Poprawka”
    ElseIf Cells(intRow + 2, 4) >= 34 And Cells(intRow + 2, 4) <= 67 Then
    Cells(intRow + 2, 5) = “Zdał”
    ElseIf Cells(intRow + 2, 4) > 67 Then
    Cells(intRow + 2, 5) = “Zdał z wyróżnieniem”
    End If

    intCounter = intCounter + 1
    intRow = intRow + 1

    Loop

    ‘ustawiamy wartości początkowe parametrówł
    intCounter = 1
    intRow = 0

    ‘przypisujemy kolory do wyniku egzaminu
    Do While intCounter < Application.WorksheetFunction.CountA(Range(“A:A”))

    If Cells(intRow + 2, 4) <= 33 Then
    Cells(intRow + 2, 5).Select
    With Selection
    .Interior.Color = vbRed
    End With
    ElseIf Cells(intRow + 2, 4) >= 34 And Cells(intRow + 2, 4) <= 67 Then
    Cells(intRow + 2, 5).Select
    With Selection
    .Interior.Color = vbYellow
    End With
    ElseIf Cells(intRow + 2, 4) > 67 Then
    Cells(intRow + 2, 5).Select
    With Selection
    .Interior.Color = vbGreen
    End With
    End If

    intCounter = intCounter + 1
    intRow = intRow + 1

    Loop

    End Sub