Pentru a exersa ceea ce tocmai am învățat, vom parcurge procesul de creare a unei macrocomenzi pentru a picta o tablă de șah de 10x10 (roșu și negru) pornind de la celula activă în prezent.
Să ne uităm la ieșirea buclei pe care vrem să o obținem:
În continuare, primul pas al exercițiului va fi crearea unei proceduri goale:
Sub loops_exercise() Const NB_CELLS As Integer = 10 'Numărul de celule pe care vrem să le pictăm '... End Sub
Să începem prin a adăuga o buclă FOR pentru a înnegri coloana A (constanta NB_CELLS este 10).
Ar trebui să obținem următorul rezultat:
Să aruncăm o privire la cod:
Sub loops_exercise() Const NB_CELLS As Integer = 10 'Numărul de celule pe care vrem să le pictăm For r = 1 To NB_CELLS 'r => numărul rândului Cells(r, 1).Interior.Color = RGB(0, 0, 0) 'Negru Next End Sub
Următorul pas colorează în roșu fiecare celulă ulterioară, folosind instrucțiunea IF (în funcție de faptul că numărul rândului este par sau impar). Vedea inferior:
Codul pentru rezolvarea acestei sarcini secundare este următorul:
Sub loops_exercise() Const NB_CELLS As Integer = 10 'Numărul de celule pe care vrem să le pictăm For r = 1 To NB_CELLS 'r => numărul rândului If r Mod 2 = 0 Then 'Mod => este restul din diviziune Cells(r, 1).Interior.Color = RGB(200, 0, 0) 'roșu Else Cells(r, 1).Interior.Color = RGB(0, 0, 0) 'Negru End If Next End Sub
Condiția IF r Mod 2 = 0 înseamnă: dacă restul împărțirii lui r la 2 este 0...
Numai numărul rândului care este par are restul 0 atunci când este împărțit la 2:
Cum să faci o altă buclă care să execute bucla pe care am scris-o deja pentru 10 coloane. Vedea inferior:
Codul pentru rezolvarea acestei sarcini secundare este următorul:
Sub loops_exercise() Const NB_CELLS As Integer = 10 'Tablă de șah 10x10 cu celule For r = 1 To NB_CELLS 'r => Numărul rândului For c = 1 To NB_CELLS 'c => Numărul coloanei If r Mod 2 = 0 Then Cells(r, c).Interior.Color = RGB(200, 0, 0) 'roșu Else Cells(r, c).Interior.Color = RGB(0, 0, 0) 'Negru End If Next Next End Sub
Acum al doilea ciclu este introdus în primul.
Pentru a obține următorul rezultat...
A inlocui:
If r Mod 2 = 0 Then
Pe:
If (r + c) Mod 2 = 0 Then
Tot ce rămâne de făcut este să schimbi codul, astfel încât tablele de șah să fie create pornind de la celula selectată (nu A1). Vezi mai jos:
Pentru aceasta, vom scrie următorul cod:
Sub loops_exercise() Const NB_CELLS As Integer = 10 'Tablă de șah 10x10 cu celule Dim offset_row As Integer, offset_col As Integer '=> adăugați 2 variabile 'Offset (rânduri) începând de la prima celulă = numărul de rând al celulei active curente - 1 offset_row = ActiveCell.Row - 1 'Offset (coloane) începând de la prima celulă = numărul coloanei celulei active curente - 1 offset_col = ActiveCell.Column - 1 For r = 1 To NB_CELLS 'Numărul de linie For c = 1 To NB_CELLS 'Numărul coloanei If (r + c) Mod 2 = 0 Then 'Celulă (număr rând + offset suplimentar rând, numărul coloanei + 'deplasarea suplimentară a coloanelor) Cells(r + offset_row, c + offset_col).Interior.Color = RGB(200, 0, 0) 'roșu Else Cells(r + offset_row, c + offset_col).Interior.Color = RGB(0, 0, 0) 'Negru End If Next Next End Sub