Tareas repetitivas con bucles en VBA

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.

Bucle While en VBA

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:

resultado bucle While en Excel

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

Bucle While en VBA

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.

Bucle Do While en VBA

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.

Bucle do until en VBA

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.

Bucle Do loop until en VBA

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:

Exit do Bucles VBA

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:

bucle for con incremento 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:

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

Diseño de macros en Excel. Con ejemplos prácticos

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *