Pętla Do While
Przykłady opisane w tej lekcji dostępne są w
arkuszu Excela VBA.xlsm, tylko ich
samodzielne przerobienie daje gwarancję zapamiętania tej lekcji.
Przykłady dla wszystkich lekcji szkolenia Excel
2013: ExcelSzkolenie.pl
Cwiczenia Excel 2013.zip
Ta lekcja może być
obejrzana lub przeczytana poniżej.
Film wygląda
najlepiej jeśli będzie odtwarzany w rozdzielczości 720p HD, rozdzielczość można
zmienić dopiero po uruchomieniu filmu klikając na ikonie trybika
która pojawi się w prawym dolnym
rogu poniższego ekranu. Po kilku sekundach od zmiany obraz wyostrzy się.
Często nie wiemy pisząc makro ile razy pewna
czynność powinna być powtórzona, w takich wypadkach bardzo pomocna jest pętla
Do While, która wykonuje zadaną czynność tak długo jak
warunek podany po ‘While’ jest spełniony. Należy przy
tym uważać aby nie napisać makra, które samo nigdy nie zakończy swojego
działania.
Składnia:
Do While [warunek]
[instrukcje]
Loop
Słowo Loop jest końcem pętli, po dojściu do niego następuje
przejście do linii zawierającej Do While i ponowne
sprawdzenie, czy warunek jest spełniony jeśli tak instrukcje zostaną wykonane
po raz kolejny, jeśli nie nastąpi przejście do pierwszej linijki kodu makra za
wyrazem ‘Loop’.
Przykład 1.
(Arkusz: ‘Do While’, Moduł: ‘Do_While’)
Pewien inwestor
giełdowy ma brzydki zwyczaj zaznaczania spółek, którymi jest zainteresowany
zmieniając kolor tła komórek na czerwony.
Jego doradca
inwestycyjny nie mogąc użyć filtra, który nie rozpoznaje kolorów, napisał poniższe
makro, które dla komórek z czerwonym tłem wpisuje w kolumnę obok wyraz
‘wybrany’.
Przed uruchomieniem
makra należy ustawić jako aktywną komórkę pierwszą komórkę z kolumny, która ma
zostać sprawdzona.
Sub Petla_Do_While()
Do While ActiveCell.Value
<> "" 'warunek pętli rób tak długo aż napotkasz pustą komórkę
If Selection.Interior.ColorIndex
= 3 Then 'instrukcja
warunkowa If: jeżeli komórka ma kolor czerwony, wtedy
ActiveCell.Offset(0, 1).Range("A1").Select 'przejdź o jedną komórkę w prawo
ActiveCell.Value =
"wybrany" 'wpisz w aktywnej komórce tekst "wybrany"
ActiveCell.Offset(0, -1).Range("A1").Select 'wróć jedną komórkę w lewo
End If 'koniec instrukcji warunkowej If
ActiveCell.Offset(1, 0).Range("A1").Select 'przejdź o jedną komórkę w dół, niezależnie od koloru więc
po End If
Loop 'koniec
pętli: wróć do linijki z Do While
End Sub
Ponieważ lista może być
różnej długości użyta została pętla Do While, która
będzie działać tak długo aż nie znajdzie pustej komórki, którą oznaczamy jako
dwa cudzysłowy ””.
Istrukcja ActiveCell.Offset(x,
y).Range("A1").Select pozwala makru na przechodzenie pomiędzy
komórkami, x to przejście pomiędzy wierszami, jeśli x jest dodatni w dół, jeśli
ujemny w górę, y to przejście pomiędzy kolumnami, w prawo dla dodatnich
wartości y.