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