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