Los bucles repiten las instrucciones varias veces y pueden ahorrar mucho tiempo.
Los siguientes tipos de bucles existen en Excel VBA:
El siguiente código inserta una secuencia de números en cada celda de la columna A (del 1 al 12):
Sub while_loop() Cells(1, 1) = 1 Cells(2, 1) = 2 Cells(3, 1) = 3 Cells(4, 1) = 4 Cells(5, 1) = 5 Cells(6, 1) = 6 Cells(7, 1) = 7 Cells(8, 1) = 8 Cells(9, 1) = 9 Cells(10, 1) = 10 Cells(11, 1) = 11 Cells(12, 1) = 12 End Sub
Este código es muy repetitivo...
Imagina si tuviéramos que insertar números consecutivos en cientos de celdas en lugar de solo 12... Ahora entiendes por qué los bucles son tan útiles.
Pongamos un ejemplo de un ciclo vacío While:
Sub while_loop() While [condición] 'Instrucciones Wend End Sub
Siempre que la condición sea verdadera, las declaraciones en el ciclo continuarán ejecutándose (pero tenga cuidado de no crear un ciclo infinito).
A continuación se muestra la macro de bucle que se discutió anteriormente, convertida en un bucle While:
Sub while_loop() Dim num As Integer num = 1 'El número inicial (en este caso, es el número de línea y el valor que se establece) While num <= 12 'Siempre que la variable num sea menor o igual a 12, las instrucciones se ejecutarán Cells(num, 1) = num 'Numeración num = num + 1 'El número se incrementa en 1 cada vez que pasa el ciclo Wend End Sub
Usando este ciclo en una macro, todo lo que tendríamos que hacer si necesitáramos 400 cintas en lugar de 12 es reemplazar 12 con 400.
Hay otra forma de escribir un bucle que funciona igual que While Wend (que se ejecuta siempre que cierta condición contenida en el comando While sea verdadera):
Sub do_while_loop() Do While [condición] 'Instrucciones Loop End Sub
La siguiente versión muestra que la condición se puede escribir al final del bucle Do Loop, lo que significa que las instrucciones se ejecutarán exactamente al menos una vez:
Sub do_while_loop() Do 'Instrucciones Loop While [condición] End Sub
En lugar de hacer un bucle mientras se cumple la condición, también podemos salir del bucle por condición si reemplazamos While con Until:
Sub do_while_loop() Do Until [condición] 'Instrucciones Loop End Sub
Sub for_loop() For i = 1 To 5 'Instrucciones Next End Sub
El bucle For se repetirá aquí 5 veces.
Cada vez que se repite este ciclo, la variable i se incrementa automáticamente en 1:
Sub for_loop() For i = 1 To 5 MsgBox i Next End Sub
Es posible salir antes del ciclo For usando la siguiente instrucción:
Exit For 'Salir del bucle For
Consideremos un ejemplo que claramente mostrará esto:
Sub for_loop() Dim max_loops As Integer max_loops = Range("A1") 'En la celda A1, especificamos el límite para el número de repeticiones. For i = 1 To 7 'Número esperado de ciclos: 7 If i > max_loops Then 'Si la celda A1 está vacía o contiene un número inferior a 7, reduzca el número de repeticiones Exit For 'Si la condición anterior es TRUE, entonces la salida del bucle For...loop End If MsgBox i Next End Sub
Otros operadores de Salir:
Exit Do 'Salida de bucle Do Loop
Exit Sub 'Salir del procedimiento
Exit Function 'Función de salida