Pętla While Wend w Excel VBA 5


1. Pętla While Wend – wprowadzenie

Pętla While Wend jest najprostszą w swojej konstrukcji pętlą dostępną w VBA. Jeśli nasz kod ma być krótki, nieskomplikowany i mieć prostą konstrukcję, zaleca się stosowanie właśnie tej pętli zamiast pętel Do…Loop. Daje nam ona podobne możliwości. Poniżej najprostszy przykład pętli wyświetlający licznik pętli, aż do momentu, gdy osiągnie on wartość 5. Wadą pętli While…Wend jest brak możliwości wyjścia z pętli przed jej ukończeniem. Dla przykładu pętle Do…Loop i For…Next dają nam taką możliwość.

2. Przykład wykorzystania pętli While…Wend

Zróbmy  krótki przykład. Wklejmy do arkusza Excel dane z poniższej tabelki, zaczynając od komórki “A1”.

Indeks giełdowyObroty w mlnzmianaWzrost/spadek
WIG201731,375%
WIG46756,182%
mWIG403912,73-6%
sWIG8014136,79-8%
NCIndex286,95%

Napiszmy proste makro z wykorzystaniem pętli. Naszym zadaniem będzie wypełnienie ostatniej kolumny wartością wzrost, spadek lub brak zmian w zależności od znaku+/- w kolumnie “C”. Wartości ujemne będą tutaj informowały o spadku.

Jak widzisz licznik pętli zaczyna się od wartości 2, a więc od drugiego wiersza. Znak plus, bądź minus sprawdziliśmy przy użyciu funkcji SGN(). Funkcja ta zwraca wartość ze zbioru -1/0/1 w zależności od znaku argumentu. Sama instrukcja przyporządkowująca, to w naszym wypadku Select CASE. Oczywiście podobny przykład możemy zrobić przy użyciu instrukcji If…Then…Else. Blokiem kodu intCounter = intCounter + 1 zwiększamy licznik pętli o 1, przechodząc do kolejnych wierszy.

Kurs Excel VBA - Pętla While Wend

Kurs Excel VBA – Pętla While Wend

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

3.1 Zmodyfikuj przykład z rozdziału przy zastosowaniu instrukcji If Then Else.

3.2 Zmodyfikuj przykład, w taki sposób, by wynik Wzrost/Spadek/ brak zmian dodatkowo wypełniał komórkę kolorem np zielony, czerwony, żółty. Formatowanie komórek, czcionek i zakresów opisywałem w tej części szkolenia.


Dodaj komentarz

Twój adres email nie zostanie opublikowany.

5 komentarzy do “Pętla While Wend w Excel VBA

    • dan

      Sub WhileWendExample2()

      Dim intCounter As Integer
      intCounter = 2

      While intCounter <= 6

      If Sgn(Cells(intCounter, 3)) = -1 Then
      Cells(intCounter, 4) = "Spadek"
      ElseIf Sgn(Cells(intCounter, 3)) = 1 Then
      Cells(intCounter, 4) = "Wzrost"
      Else
      Cells(intCounter, 4) = "brak zmian"
      End If

      intCounter = intCounter + 1
      Wend
      End Sub

  • GreG

    Zadanie 1. Ale po co zmieniać to?? nie widze najmniejszego sensu 🙂
    zadanie 2.

    Sub zmiany_wartości()
    Dim intIleRazy As Integer

    intIleRazy = 2

    Do While intIleRazy <= 6
    If Cells(intIleRazy, 3) < 0 Then
    Cells(intIleRazy, 4) = "spadek"
    Cells(intIleRazy, 4).Select
    Selection.Interior.Color = RGB(255, 0, 0)
    ElseIf Cells(intIleRazy, 3) = 0 Then
    Cells(intIleRazy, 4) = "brak zmian"
    Cells(intIleRazy, 4).Select
    Selection.Interior.Color = RGB(255, 255, 0)
    Else: Cells(intIleRazy, 4) = "wzrost"
    Cells(intIleRazy, 4).Select
    Selection.Interior.Color = RGB(0, 255, 0)

    End If
    intIleRazy = intIleRazy + 1
    Loop

    End Sub

  • Tomo G

    Sub zad32()
    Dim i As Integer
    i = 2

    While i <= 6
    If Sgn(Cells(i, 3)) = 1 Then
    Cells(i, 4) = “wzrost”
    Cells(i, 4).Interior.Color = RGB(0, 255, 0)
    ElseIf Sgn(Cells(i, 3)) = 0 Then
    Cells(i, 4) = “bez zmian”
    Cells(i, 4).Interior.Color = RGB(255, 255, 0)
    Else
    Cells(i, 4) = “spadek”
    Cells(i, 4).Interior.Color = RGB(255, 0, 0)
    End If
    i = i + 1
    Wend

    End Sub

  • Marcin

    3.1

    Option Explicit
    Sub PetlaWhile2()

    Dim intCounter As Integer
    intCounter = 2

    While intCounter < Application.WorksheetFunction.CountA(Range(“A:A”)) + 1
    If Sgn(Cells(intCounter, 3)) < 0 Then
    Cells(intCounter, 4) = “Spadek”
    ElseIf Sgn(Cells(intCounter, 3)) = 0 Then
    Cells(intCounter, 4) = “Bez zmian”
    ElseIf Sgn(Cells(intCounter, 3)) > 0 Then
    Cells(intCounter, 4) = “Wzrost”
    End If
    intCounter = intCounter + 1
    Wend

    End Sub

     

    3.2

    Option Explicit
    Sub PetlaWhile3()

    Dim intCounter As Integer
    intCounter = 2

    While intCounter < Application.WorksheetFunction.CountA(Range(“A:A”)) + 1
    If Sgn(Cells(intCounter, 3)) < 0 Then
    Cells(intCounter, 4) = “Spadek”
    Cells(intCounter, 4).Select
    Selection.Interior.Color = vbGreen
    ElseIf Sgn(Cells(intCounter, 3)) = 0 Then
    Cells(intCounter, 4) = “Bez zmian”
    Cells(intCounter, 4) = “Spadek”
    Cells(intCounter, 4).Select
    Selection.Interior.Color = vbYellow
    ElseIf Sgn(Cells(intCounter, 3)) > 0 Then
    Cells(intCounter, 4) = “Wzrost”
    Cells(intCounter, 4) = “Spadek”
    Cells(intCounter, 4).Select
    Selection.Interior.Color = vbRed
    End If
    intCounter = intCounter + 1
    Wend

    End Sub