Aby przećwiczyć to, czego się właśnie nauczyliśmy, przeprowadzimy proces tworzenia makra do malowania szachownicy 10x10 (czerwonej i czarnej), zaczynając od aktualnie aktywnej komórki.
Spójrzmy na wynik pętli, którą chcemy uzyskać:
Następnie pierwszym krokiem ćwiczenia będzie utworzenie pustej procedury:
Sub loops_exercise()
Const NB_CELLS As Integer = 10 'Liczba komórek, które chcemy pomalować
'...
End Sub
Zacznijmy od dodania pętli FOR, aby zaczernić kolumnę A (stała NB_CELLS wynosi 10).
Powinniśmy uzyskać następujący wynik:
Rzućmy okiem na kod:
Sub loops_exercise()
Const NB_CELLS As Integer = 10 'Liczba komórek, które chcemy pomalować
For r = 1 To NB_CELLS 'r => numer wiersza
Cells(r, 1).Interior.Color = RGB(0, 0, 0) 'Czarny
Next
End Sub
Następny krok koloruje każdą kolejną komórkę na czerwono, używając instrukcji IF (w zależności od tego, czy numer wiersza jest parzysty czy nieparzysty). Widzieć niżej:
Kod rozwiązania tego podzadania jest następujący:
Sub loops_exercise()
Const NB_CELLS As Integer = 10 'Liczba komórek, które chcemy pomalować
For r = 1 To NB_CELLS 'r => numer wiersza
If r Mod 2 = 0 Then 'Mod => to reszta z dzielenia
Cells(r, 1).Interior.Color = RGB(200, 0, 0) 'Czerwony
Else
Cells(r, 1).Interior.Color = RGB(0, 0, 0) 'Czarny
End If
Next
End Sub
Warunek IF r Mod 2 = 0 oznacza: jeśli reszta z dzielenia r przez 2 wynosi 0...
Tylko parzysty numer wiersza przy dzieleniu przez 2 daje resztę 0:
Jak zrobić kolejną pętlę, która wykona pętlę, którą napisaliśmy już dla 10 kolumn. Widzieć niżej:
Kod rozwiązania tego podzadania jest następujący:
Sub loops_exercise()
Const NB_CELLS As Integer = 10 'Szachownica 10x10 z komórkami
For r = 1 To NB_CELLS 'r => Numer wiersza
For c = 1 To NB_CELLS 'c => Numer kolumny
If r Mod 2 = 0 Then
Cells(r, c).Interior.Color = RGB(200, 0, 0) 'Czerwony
Else
Cells(r, c).Interior.Color = RGB(0, 0, 0) 'Czarny
End If
Next
Next
End Sub
Teraz drugi cykl jest wstawiany do pierwszego.
Aby osiągnąć następujący wynik...
Zastępować:
If r Mod 2 = 0 Then
NA:
If (r + c) Mod 2 = 0 Then
Pozostało jeszcze tylko zmienić kod tak, aby szachownica tworzona była zaczynając od wybranej komórki (nie A1). Zobacz poniżej:
W tym celu napiszemy następujący kod:
Sub loops_exercise()
Const NB_CELLS As Integer = 10 'Szachownica 10x10 z komórkami
Dim offset_row As Integer, offset_col As Integer '=> dodaj 2 zmienne
'Przesunięcie (wiersze) począwszy od pierwszej komórki = numer wiersza aktualnie aktywnej komórki - 1
offset_row = ActiveCell.Row - 1
'Przesunięcie (kolumny) począwszy od pierwszej komórki = numer kolumny aktualnie aktywnej komórki - 1
offset_col = ActiveCell.Column - 1
For r = 1 To NB_CELLS 'Numer kolejki
For c = 1 To NB_CELLS 'Numer kolumny
If (r + c) Mod 2 = 0 Then
'Komórka (numer wiersza + dodatkowe przesunięcie wiersza, numer kolumny +
'dodatkowe przemieszczenie głośników)
Cells(r + offset_row, c + offset_col).Interior.Color = RGB(200, 0, 0) 'Czerwony
Else
Cells(r + offset_row, c + offset_col).Interior.Color = RGB(0, 0, 0) 'Czarny
End If
Next
Next
End Sub