¿CÓMO REALIZAR UN BUCLE EN VBA?

Tras varios post con temas de formulación, hoy me gustaría volver a la programación y abordar varias peticiones que me llegaron como consulta a través de la web.

Estas consultas están relacionadas con los bucles y cómo se construyen en VBA. Me han pedido una explicación sencilla y práctica y con varios tipos de bucles.

Pues empecemos 🙂

Bien, comenzaré por el tipo de bucle que más utilizo, se trata de la instrucción For – Next. Veamos como podemos construir un ejemplo e ir confeccionado nuestro código.

Pongamos que tenemos una columna con una serie de datos, números. Y queremos indicar en la columna de al lado, lo siguiente:

CREAR UN BUCLE EN VBA1

Si los números de la columna “A” son mayores de 5 entonces los multiplicamos por 4 y si son igual o menor a 5 entonces dejamos la misma cifra. Los resultados los grabaremos en la columna “B” (For-Next), así:

CREAR UN BUCLE EN VBA2

Si queremos usar la instrucción For-Next, debemos utilizar una estructura como la siguiente, donde detectamos la longitud del rango que debemos recorrer con ese bucle, declaramos la variable que utilizaremos “i”, y por último agregamos la condiciones o sentencia que vayamos a utilizar en el bucle por cada línea (“i”) que recorramos.

Os lo explico detenidamente en la misma macro:

Sub FOR_NEXT()
'Definimos una variable para contener la información, yo suelo utilizar double.
Dim i As Double
With Sheets(1)
'Determinamos la longitud del rango de datos por los que vayamos a recorrer el blucle (Fin)
fin = Application.CountA(.Range("A:A"))
'Indicamos que para "i" es igual a 2 (tenemos datos de cabecera) hasta el final.
For i = 2 To fin
'introducimos la condición a aplicar, fijaros que la variable "i" sustituye a la fila, dado que será el proceso quien recorrerá el rango y quien determinará la siguiente fila.
If .Cells(i, 1) > 5 Then .Cells(i, 2) = .Cells(i, 1) * 4
If .Cells(i, 1) <= 5 Then .Cells(i, 2) = .Cells(i, 1)
'Una vez que pasamos la fila 2, la instrucción Next obliga a seguir con la siguiente i (fila).
Next
End With
End Sub

Esta es una forma muy sencilla de realizar esta instrucción, se podría complicar mucho más, es decir introducir otro bucle dentro del bucle principal, o varios! Pero esta explicación creo que basta para nuestro propósitos.

Existe otro tipo de instrucción que podemos utilizar y que también genera un bucle. Me refiero a las instrucciones Do – While o Do-Until, que vienen a ser “hacer mientras” y “hacer hasta”. Efeectivamente, en ambos casos lo que hacemos es dar la orden de realizar cierta tarea mientras se de una determinada condición o hasta un determinado punto.

Siguiendo el ejemplo que tenemos, vamos a suponer que queremos hacer lo mismo, pero usando Do-While, para ello necesitamos el siguiente código y estructura:

Sub DO_WHILE()
Dim i As Double
'Definimos la variable para recorrer el bucle
With Sheets(1)
'Indicamos que el contador inicia en la segunda fila (tenemos datos de cabecera).
i = 2
'Indicamos que la condición se haga mientras en la columna 1 existan datos, es decir, sea distinto de vacío <> empty
Do While .Cells(i, 1) <> Empty
If .Cells(i, 1) > 5 Then .Cells(i, 3) = .Cells(i, 1) * 4
If .Cells(i, 1) <= 5 Then .Cells(i, 3) = .Cells(i, 1)
i = i + 1
'Una vez que pasamos la línea dos, incrementamos en +1 la línea a recorrer y luego repetimos el proceso (loop)
Loop
End With
End Sub

Este proceso ofrece el mismo resultado que el bucle for-next, exactamente el mismo. También se podría utilizar DO-UNTIL, es prácticamente igual al anterior (los cambios en rojo).

Sub DO_UNTIL()
Dim i As Double
With Sheets(1)
i = 2
Do Until .Cells(i, 1) = Empty
' Tan solo hay que decir que realice la condición hasta que el rango que recorre no tenga datos, es decir, sea "Empty"
If .Cells(i, 1) > 5 Then .Cells(i, 4) = .Cells(i, 1) * 4
If .Cells(i, 1) <= 5 Then .Cells(i, 4) = .Cells(i, 1)
i = i + 1
Loop
End With
End Sub

Para finalizar os dejo la posibilidad de trabajar adicionalemente con una variable booleana (nos devuelve verdadero o falso) y que vamos a llamar bData y declararla como Boolean.

Sub DO_WHILE_BOOLEANA()
Dim i As Double
'Creamos una variable Boolean (bData)
Dim bData As Boolean
With Sheets(1)
i = 2
Do While .Cells(i, 1) <> Empty
'Definimos la variable en verdadero
bData = (.Cells(i, 1) > 5)
'La incorporamos a la condición reduciendo así el código
If bData Then .Cells(i, 5) = .Cells(i, 1) * 4
If Not bData Then .Cells(i, 5) = .Cells(i, 1)
i = i + 1
Loop
End With
End Sub

Ahora os muestro el archivo después de haber aplicado las cuatro macros, como podéis observar el resultado es el mismo en todos los casos:

CREAR UN BUCLE EN VBA

Y estos son algunos ejemplos de cómo podéis montar un bucle utilizando varias instrucciones. En mi caso particular suelo utilizar muy a menudo la instrucción For-Next, pero cualquier alternativa será válida siempre que los datos y su disposición así lo permita.

Espero que os sirva de ayuda este pequeño tutorial, son ejemplos muy prácticos y sencillos de aplicar 🙂

Descarga el archivo de ejemplo pulsando en: ¿CÓMO REALIZAR UN BUCLE EN VBA?

Anuncios

2 pensamientos en “¿CÓMO REALIZAR UN BUCLE EN VBA?

¿Te ha gustado?. Deja un comentario

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s