Las estructuras de bucles en VBA son utilizadas para realizar de forma repetitiva unas determinadas tareas. Podemos determinar que se repitan las instrucciones mientras una condición sea verdadera o falsa, un número específico de veces o una vez para cada elemento de una colección. Veamos las distintas estructuras de bucle con las que podemos trabajar en VBA.
Estructuras de bucles en VBA
Bucles While
Se ejecutará el conjunto de instrucciones mientras la condición especificada sea verdadera.
La sintaxis de la estructura en VBA sería la siguiente:
While condition
Instrucciones
Wend
Veamos un ejemplo en Excel con el siguiente código:
Dim num As Integer
num = 1
While num <= 10
Cells(num, 1).Value = num
num = num + 1
Wend
Mientras la variable num sea menor o igual a 10 escribiremos en la celda el valor de la variable. Debemos de tener cuidado de que el bucle no sea infinito y que, en algún momento, no se cumpla la condición para que el programa pueda continuar. En este caso vamos incrementando el valor de la variable num.
El resultado de ejecutar el código sería:
Bucles Do … Loop
Se repetirá el bucle mientras la condición especificada sea verdadera o hasta que se convierta en verdadera. La condición se podrá evaluar al principio o al final del bucle, es decir, antes o después de ejecutar las instrucciones. Podemos usar este tipo de bucles de la siguientes maneras:
Do… While… Loop
La lógica de este tipo de bucles es exactamente igual a la estructura While… Wend
La sintaxis de la estructura en VBA sería la siguiente:
Do While Condition
Instrucciones
Loop
Realicemos el ejemplo anterior utilizando este tipo de bucle:
Dim num As Integer
num = 1
Do While num <= 10
Cells(num, 1).Value = num
num = num + 1
Loop
Do… Loop… While
En este caso la condición se evalúa después de realizar todas las instrucciones. Nos aseguramos de que las instrucciones se ejecutan, al menos, una vez.
La sintaxis de la estructura en VBA sería la siguiente:
Do
instrucciones
Loop While condicion
Realicemos el ejemplo anterior utilizando este tipo de bucle:
num = 1
Do
Cells(num, 1).Value = num
num = num + 1
Loop While num <= 10
Do… until… loop
Se ejecutará el conjunto de instrucciones hasta que la condición especificada sea verdadera.
La sintaxis de la estructura en VBA sería la siguiente:
Do Until Condition
Instrucciones
Loop
Realicemos el ejemplo anterior utilizando este tipo de bucle:
Dim num As Integer
num = 1
Do Until num > 10
Cells(num, 1).Value = num
num = num + 1
Loop
En este caso se ejecutarán las instrucciones que están dentro del bucle hasta que se cumpla la condición, es decir, hasta que la variable num sea mayor que 10.
Do… loop… until
En este caso la condición se evalúa después de realizar todas las instrucciones. Nos aseguramos de que las instrucciones se ejecutan, al menos, una vez.
La sintaxis de la estructura en VBA sería la siguiente:
Do
instrucciones
Loop Until condicion
Realicemos el ejemplo anterior utilizando este tipo de bucle:
Dim num As Integer
num = 1
Do
Cells(num, 1).Value = num
num = num + 1
Loop Until num > 10
Exit Do
Si en cualquier momento queremos acabar con las repeticiones del bucle, podemos utilizar la instrucción:
- Exit Do. No ejecutará el resto de instrucciones y concluye el bucle. Seguirá la ejecución del programa fuera del bucle.
Añadamos esta instrucción para comprender su funcionamiento:
Dim num As Integer
num = 1
Do While num <= 10
If num = 7 Then Exit Do
Cells(num, 1).Value = num
num = num + 1
Loop
En este caso el resultado en Excel será el siguiente:
Es decir, cuando la variable alcanza el valor 7, salimos del bucle sin ejecutar el resto de instrucciones.
Bucles en VBA: For…Next
En este tipo de estructuras se especifica el número de veces que se tiene que repetir el bucle. Usaremos una variable como contador del número de repeticiones. Además, indicaremos los valores iniciales y finales para el contador, y podremos determinar la cantidad por la que se incrementa el contador cada vez que se repite el bucle.
La sintaxis de la estructura en VBA sería la siguiente:
For contador = inicio To final [ Step incremento ]
instrucciones
Next contador
Realicemos el ejemplo anterior utilizando este tipo de bucle:
For num = 1 To 10
Cells(num, 1).Value = num
Next num
El incremento es opcional. Lo podemos utilizar cuando queremos que el contador incremente en una cantidad específica cada vez a través del bucle. Por ejemplo:
For num = 1 To 10 Step 2
Cells(num, 1).Value = num
Next num
Con lo que tendremos este resultado en Excel:
Por último, como en el caso de los bucles Do…loop, también podemos salir del bucle con la instrucción Exit For. Esta instrucción concluye el bucle, sin ejecutar el resto de instrucciones
For num = 1 To 10
If num = 7 Then Exit For
Cells(num, 1).Value = num
Next num
For Each
Finalmente, hablemos de la estructura For Each. Mediante este bucle podemos conseguir que se repitan las instrucciones una vez para cada elemento de una colección. Es decir, realiza las acciones deseadas en cada uno de los elementos de una colección.
La sintaxis de la estructura en VBA sería:
For Each elemento In coleccion
instrucciones
Next
Realicemos el ejemplo anterior utilizando este tipo de bucle:
Dim num As Integer
Dim celda As Range
num = 1
For Each celda In Range("A1:A10")
celda.Value = num
num = num + 1
Next
Si lo deseas, puedes acceder a la Explicación del equipo de Microsoft sobre este tema
Para poder avanzar en el desarrollo de macros en Excel, además de cómo trabajar con estas estructuras de bucle, debemos conocer:
- el uso de variables
- la estructura del código en VBA.
- las estructuras condicionales If..then y Select Case
Diseño de macros en Excel. Con ejemplos prácticos
Esta entrada es parte de nuestro curso Diseño de macros en Excel. Con ejemplos prácticos