Una de las cosas que más me gustan de VBA es que puede hacer por ti cosas tan increíbles como repetir un montón de veces lo mismo sin apenas esfuerzo.
Este es el caso del bucle For Next en VBA y dirás, ¿qué es un bucle en VBA? Pues es la repetición de cierto código un número determinado de veces.
Sintaxis
El bucle FOR NEXT en VBA nos permite en Excel (o cualquier otro lenguaje de programación) repetir una acción un número de veces dado. Su sintaxis es la siguiente:
For CONTADOR = COMIENZO To FINAL [Step VALOR_DE_PASO] 'código [Exit For] 'código Next
Donde:
- CONTADOR: es la variable numérica de control del bucle
- COMIENZO: es el valor numérico donde comenzará el CONTADOR. Es un número entero.
- FINAL: es el valor numérico hasta donde contará el CONTADOR.
- Step VALOR_DE_PASO: opcional. Valor numérico que irá sumándose al CONTADOR a lo largo del bucle. Es un numero natural.
- ‘código: es el código de la expresión que queremos que se ejecute dentro del bucle todas las veces.
- Exit For: sentencia opcional que nos permite salir del bucle y continuar la macro a partir del NEXT final sin necesidad de haber recorrido el bucle completamente.
Ejemplos
A continuación vamos a ver una serie de ejemplos que nos permitan entender mejor el bucle FOR NEXT en VBA. En cada ejemplo veremos una particularidad en concreto de este tipo de bucles y se explicará.
Ejemplo 1:
En este ejemplo tenemos el bucle FOR NEXT en VBA más sencillo. El bucle cuenta de 1 a 10 y va poniendo en una columna el valor del contador.
For CONTADOR = 1 To 10 fila = CONTADOR Cells(fila, 1) = CONTADOR Next
Ejemplo 2:
En este ejemplo añadimos la propiedad “step 2” que incrementará el contador de 2 en 2. Es decir, inicialmente el contador valdrá 1, luego 3, luego 5 y así sucesivamente.
For CONTADOR = 1 To 10 Step 2 fila = CONTADOR Cells(fila, 2) = CONTADOR Next
Ejemplo 3:
En este ejemplo el bucle for next en vba va contando hacia atrás gracias al step -1 y al contador que empieza en vez de en 1 en 10 y acaba en 1.
For CONTADOR = 10 To 1 Step -1 fila = CONTADOR Cells(fila, 3) = CONTADOR Next
Ejemplo 4:
En este ejemplo utilizamos la expresión Exit For cuando el contador llega hasta 49 y lanzamos un mensaje en pantalla en este momento.
For CONTADOR = 10 To 100 If CONTADOR = 49 Then MsgBox "El contador ha llegado al número " & CONTADOR Exit For End If Next
Ejemplo 5:
En este ejemplo usamos un código muy similar al anterior pero añadimos al final del IF (ver más sobre IF en VBA) otro pedacito de código.
For CONTADOR = 10 To 100 If CONTADOR = 49 Then MsgBox "El contador ha llegado al número " & CONTADOR Exit For End If fila = CONTADOR Cells(CONTADOR, 5) = CONTADOR Next
Bonus Track: Ejercicio
El ejercicio que os proponemos es el siguiente:
Crea una macro con el bucle FOR NEXT en VBA que cuente de 5 en 5 y vaya poniendo en celda sucesivas el valor del contador. El contador deberá empezar en 0 y terminar en 100. Deberá escribirse en la columna F desde la fila 1 hasta la fila 20.
Solución
La solución al ejercicio bonus track planteada en el anterior párrafo es la siguiente:
fila = 0 For CONTADOR = 0 To 100 Step 5 Cells(1, "f").Offset(fila, o) = CONTADOR fila = fila + 1 Next
El truco consiste en utilizar la función OFFSET para ir avanzando a lo largo de las filas. La variable fila se incrementa en uno cada vez que se recorre el bucle.
En el siguiente enlace podéis descargar un libro de Excel que contiene las diferentes macros que hemos ido viendo y así podréis modificarlas y aprender a usarlas como un verdadero experto el bucle FOR NEXT en VBA.
Ejemplos del bucle FOR NEXT en VBA