El bucle For Next en VBA

bucle for next en vba excel dna

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

Autor: Quique Arranz

Quique es un fanático del Excel desde que empezó a trabajar con ello hace unos pocos años. Adquirió su conocimiento a través de Google y de infinitas pruebas y más pruebas. Además, Quique es un entusiasta de su familia (mujer e hijos), del deporte y de la cerveza... no dudes en contactar con él para cualquier duda que tengas.

16 opiniones en “El bucle For Next en VBA”

  1. Hola buenos días. Tengo una duda, a ver si me pueden ayudar.

    Actualmente tengo una columna con valores numéricos, y necesitaría formular tantas veces como aparece en cada celda de la columna. Es decir si en la celda B1 aparece 15, necesito que a su derecha se arrastre la formula 15 veces.

    Me sería de gran ayuda cualquier anotación vuestra. Un saludo cordial, muchísimas gracias de antemano.

  2. Hola, soy nuevo por aquí, y la verdad que estoy desesperado con un problema:

    Tnego una lista de tareas a cada cual le corresponde un número. Yo quiero escribir el número en otra hoja con su tarea. El problema es que hay tareas que tienen varios números y usando estructuras if y for se escribe la tarea con el primer número dos veces en luagr de la tarea con un número y después la misma tarea con el segundo número. Es decir, quiero que, al ver que ya esta repetido ese número, que continue el bucle y llegue hasta el segundo.

    Muchas gracias, y disuclpad la horrorosa explicación

    1. Hola Daniel, me temo que no comprendo cómo guardas los números de tarea en tu lista. Esa es la clave creo yo. Que no los repita es sencillo: basta crear un bucle for … next con una instrucción if NúmeroTareaAnterior<>NúmeroTareaNueva únicamente entre los números de tareas naturalmente. Seria conveniente que los números de tarea estuvieran ordenados. Saludos,

  3. hola necesito hacer un ejercicio con urgencia es igual que el ejercicio numero 3 pero necesite que empiece en b5 y termine en b14

  4. hola, Quiero copiar el contenido de la celda A1 hasta donde haya otro valor el cual es diferentes. como podria ser?
    gracias.

    1. Hola Hugo, el código que buscas es el siguiente (si he entendido bien la pregunta). Saludos,
      Sub CopiaCeldas()

      ‘Declaro las variables
      Dim rngMiRango As Range
      Dim x As Integer

      ‘Inicializo el rango con el que quiero trabajar
      Set rngMiRango = ThisWorkbook.Worksheets(1).Range(“A1:A6”)

      ‘construyo el bucle
      ‘no comienzo en 1 porque es la celda A1 que es la que quiero comparar
      For x = 2 To 6

      If rngMiRango(1, x) <> rngMiRango(1, 1) Then
      rngMiRango(1, x) = rngMiRango(1)
      End If

      Next x
      End Sub

  5. Hola Quique,

    Muchas gracias por tu artículo!! Es de gran ayuda!
    Me estoy iniciando con visual basic y tengo una duda con for next.
    En el caso que estoy realizando, necesito que cuente desde 1 hasta el valor de una celda del excel. ¿cómo lo podría hacer?

    1. Hola Mathilede,
      Me alegro de que te ayude. Para hacer lo que dices yo lo que haría es guardar el número de la celda en una variable: Mi_variable=range(“a1”) y después en el bucle poner algo así como: For i=1 to Mi_Variable
      Espero que estas indicaciones te sirvan.
      Un saludo,
      Quique

  6. En el ejemplo 3 la macro no debería contar de 10 a 1?, esta haciendo el mismo trabajo del ejemplo 2, favor verificar, según lo que entiendo debería aparecer 10,9,8,7….etc.

    1. Hola Cristian,
      El ejemplo 3 es similar al ejemplo 1 pero el funcionamiento es el inverso. En la macro 3 va contando de la fila 10 a la 1 y poniendo el valor de la fila.
      Un saludo,
      Quique

  7. Como hago para copiar con un for-next y step dos columnas saltar una tercera y luego copiar las siguientes dos columnas y así sucesivamente…Saludos.

    1. Hola José,
      para hacer esto tienes que usar la variable Step=3… esto te permite saltar de tres en tres. Sería algo así como…
      For i=1 to 100 Step=3
      columna1=i
      columna2=i+1
      Next
      De esta manera conseguirías saber las dos columnas que tienes que copiar…
      saludos!
      quique

Comentarios cerrados.