Para practicar lo que acabamos de aprender, recorreremos el proceso de creación de una macro para pintar un tablero de ajedrez de 10x10 (rojo y negro) a partir de la celda actualmente activa. Vamos a ver:
Este es el primer paso del ejercicio:
Sub loops_exercise() Const NB_CELLS As Integer = 10 'El número de celdas que queremos pintar. '... End Sub
Comencemos agregando un bucle FOR para ennegrecer la columna A (la constante NB_CELLS es 10). Ver más bajo:
Intenta hacer este ciclo tú mismo.
Ahora puedes comprobarlo con el siguiente código:
Sub loops_exercise() Const NB_CELLS As Integer = 10 'El número de celdas que queremos pintar. For r = 1 To NB_CELLS 'r => número de fila Cells(r, 1).Interior.Color = RGB(0, 0, 0) 'Negro Next End Sub
El siguiente paso colorea cada celda subsiguiente de rojo, usando la instrucción IF (según si el número de fila es par o impar). Ver más bajo:
El código para resolver esta subtarea es el siguiente:
Sub loops_exercise() Const NB_CELLS As Integer = 10 'El número de celdas que queremos pintar. For r = 1 To NB_CELLS 'r => número de fila If r Mod 2 = 0 Then 'Mod => es el resto de la división Cells(r, 1).Interior.Color = RGB(200, 0, 0) 'Rojo Else Cells(r, 1).Interior.Color = RGB(0, 0, 0) 'Negro End If Next End Sub
La condición IF r Modo 2 = 0 significa: si el resto de dividir r entre 2 es 0...
Solo el número de fila que es par tiene un resto de 0 cuando se divide por 2:
Cómo hacer otro bucle que ejecutaría el bucle que ya hemos escrito para 10 columnas. Ver más bajo:
El código para resolver esta subtarea es el siguiente:
Sub loops_exercise() Const NB_CELLS As Integer = 10 'Tablero de ajedrez de 10x10 con celdas For r = 1 To NB_CELLS 'r => Número de fila For c = 1 To NB_CELLS 'c => Número de columna If r Mod 2 = 0 Then Cells(r, c).Interior.Color = RGB(200, 0, 0) 'Rojo Else Cells(r, c).Interior.Color = RGB(0, 0, 0) 'Negro End If Next Next End Sub
Ahora el segundo ciclo se inserta en el primero.
Para lograr el siguiente resultado...
Reemplazar:
If r Mod 2 = 0 Then
En:
If (r + c) Mod 2 = 0 Then
Todo lo que queda por hacer es cambiar el código para que el tablero de ajedrez se cree a partir de la celda seleccionada (no A1). Vea abajo:
Para ello escribiremos el siguiente código:
Sub loops_exercise() Const NB_CELLS As Integer = 10 'Tablero de ajedrez de 10x10 con celdas Dim offset_row As Integer, offset_col As Integer '=> agregar 2 variables 'Desplazamiento (filas) a partir de la primera celda = número de fila de la celda activa actual - 1 offset_row = ActiveCell.Row - 1 'Desplazamiento (columnas) a partir de la primera celda = número de columna de la celda activa actual - 1 offset_col = ActiveCell.Column - 1 For r = 1 To NB_CELLS 'Número de línea For c = 1 To NB_CELLS 'número de columna If (r + c) Mod 2 = 0 Then 'Celda (número de fila + desplazamiento de fila adicional, número de columna + 'desplazamiento adicional de altavoces) Cells(r + offset_row, c + offset_col).Interior.Color = RGB(200, 0, 0) 'Rojo Else Cells(r + offset_row, c + offset_col).Interior.Color = RGB(0, 0, 0) 'Negro End If Next Next End Sub