Per mettere in pratica ciò che abbiamo appena imparato, seguiremo il processo di creazione di una macro per dipingere una scacchiera 10x10 (rossa e nera) a partire dalla cella attualmente attiva.
Diamo un'occhiata all'output del ciclo che vogliamo ottenere:
Successivamente, il primo passo dell'esercizio sarà creare una procedura vuota:
Sub loops_exercise() Const NB_CELLS As Integer = 10 'Il numero di celle che vogliamo dipingere '... End Sub
Iniziamo aggiungendo un ciclo FOR per annerire la colonna A (la costante NB_CELLS è 10).
Dovremmo ottenere il seguente risultato:
Diamo un'occhiata al codice:
Sub loops_exercise() Const NB_CELLS As Integer = 10 'Il numero di celle che vogliamo dipingere For r = 1 To NB_CELLS 'r => numero di riga Cells(r, 1).Interior.Color = RGB(0, 0, 0) 'Nero Next End Sub
Il passaggio successivo colora di rosso ogni cella successiva, utilizzando l'istruzione IF (a seconda che il numero di riga sia pari o dispari). Vedere inferiore:
Il codice per risolvere questa sottoattività è il seguente:
Sub loops_exercise() Const NB_CELLS As Integer = 10 'Il numero di celle che vogliamo dipingere For r = 1 To NB_CELLS 'r => numero di riga If r Mod 2 = 0 Then 'Mod => è il resto della divisione Cells(r, 1).Interior.Color = RGB(200, 0, 0) 'Rosso Else Cells(r, 1).Interior.Color = RGB(0, 0, 0) 'Nero End If Next End Sub
La condizione IF r Mod 2 = 0 significa: se il resto della divisione r per 2 è 0...
Solo il numero di riga pari ha resto 0 se diviso per 2:
Come creare un altro ciclo che esegua il ciclo che abbiamo già scritto per 10 colonne. Vedere inferiore:
Il codice per risolvere questa sottoattività è il seguente:
Sub loops_exercise() Const NB_CELLS As Integer = 10 'Scacchiera 10x10 con celle For r = 1 To NB_CELLS 'r => Numero di riga For c = 1 To NB_CELLS 'c => Numero di colonna If r Mod 2 = 0 Then Cells(r, c).Interior.Color = RGB(200, 0, 0) 'Rosso Else Cells(r, c).Interior.Color = RGB(0, 0, 0) 'Nero End If Next Next End Sub
Ora il secondo ciclo è inserito nel primo.
Per ottenere il seguente risultato...
Sostituire:
If r Mod 2 = 0 Then
SU:
If (r + c) Mod 2 = 0 Then
Non resta che modificare il codice in modo che la scacchiera venga creata a partire dalla cella selezionata (non A1). Vedi sotto:
Per questo, scriveremo il seguente codice:
Sub loops_exercise() Const NB_CELLS As Integer = 10 'Scacchiera 10x10 con celle Dim offset_row As Integer, offset_col As Integer '=> aggiungi 2 variabili 'Offset (righe) a partire dalla prima cella = numero di riga della cella attiva corrente - 1 offset_row = ActiveCell.Row - 1 'Offset (colonne) a partire dalla prima cella = numero di colonna della cella attualmente attiva - 1 offset_col = ActiveCell.Column - 1 For r = 1 To NB_CELLS 'Numero di riga For c = 1 To NB_CELLS 'Numero di colonna If (r + c) Mod 2 = 0 Then 'Cella (numero di riga + offset di riga aggiuntivo, numero di colonna + 'spostamento aggiuntivo degli altoparlanti) Cells(r + offset_row, c + offset_col).Interior.Color = RGB(200, 0, 0) 'Rosso Else Cells(r + offset_row, c + offset_col).Interior.Color = RGB(0, 0, 0) 'Nero End If Next Next End Sub