TOP

VBA-Lección 8.1. Bucles (Loops)

Los bucles repiten las instrucciones varias veces y pueden ahorrar mucho tiempo.

Los siguientes tipos de bucles existen en Excel VBA:

  • While ... Wend
  • Do ... Loop
  • For ... To ... Next

  • El siguiente código inserta una secuencia de números en cada celda de la columna A (del 1 al 12):

    Sub while_loop()
    
        Cells(1, 1) = 1
        Cells(2, 1) = 2
        Cells(3, 1) = 3
        Cells(4, 1) = 4
        Cells(5, 1) = 5
        Cells(6, 1) = 6
        Cells(7, 1) = 7
        Cells(8, 1) = 8
        Cells(9, 1) = 9
        Cells(10, 1) = 10
        Cells(11, 1) = 11
        Cells(12, 1) = 12
    
    End Sub
    

    Este código es muy repetitivo...

    Imagina si tuviéramos que insertar números consecutivos en cientos de celdas en lugar de solo 12... Ahora entiendes por qué los bucles son tan útiles.

    WHILE ... WEND

    Pongamos un ejemplo de un ciclo vacío While:

    Sub while_loop()
    
        While [condición]
            'Instrucciones
        Wend
    
    End Sub
    

    Siempre que la condición sea verdadera, las declaraciones en el ciclo continuarán ejecutándose (pero tenga cuidado de no crear un ciclo infinito).

    A continuación se muestra la macro de bucle que se discutió anteriormente, convertida en un bucle While:

    Sub while_loop()
    
        Dim num As Integer
        num = 1 'El número inicial (en este caso, es el número de línea y el valor que se establece)
    
        While num <= 12 'Siempre que la variable num sea menor o igual a 12, las instrucciones se ejecutarán
           Cells(num, 1) = num 'Numeración
           num = num + 1 'El número se incrementa en 1 cada vez que pasa el ciclo
        Wend
           
    End Sub
    

    Usando este ciclo en una macro, todo lo que tendríamos que hacer si necesitáramos 400 cintas en lugar de 12 es reemplazar 12 con 400.

    DO ... LOOP

    Hay otra forma de escribir un bucle que funciona igual que While Wend (que se ejecuta siempre que cierta condición contenida en el comando While sea verdadera):

    Sub do_while_loop()
    
        Do While [condición]
            'Instrucciones
        Loop
    
    End Sub
    

    La siguiente versión muestra que la condición se puede escribir al final del bucle Do Loop, lo que significa que las instrucciones se ejecutarán exactamente al menos una vez:

    Sub do_while_loop()
    
        Do
            'Instrucciones
        Loop While [condición]
    
    End Sub
    

    En lugar de hacer un bucle mientras se cumple la condición, también podemos salir del bucle por condición si reemplazamos While con Until:

    Sub do_while_loop()
    
        Do Until [condición]
            'Instrucciones
        Loop
    
    End Sub
    

    FOR ... TO ... NEXT

    Sub for_loop()
    
        For i = 1 To 5
            'Instrucciones
        Next
    
    End Sub
    

    El bucle For se repetirá aquí 5 veces.

    Cada vez que se repite este ciclo, la variable i se incrementa automáticamente en 1:

    Sub for_loop()
    
        For i = 1 To 5
            MsgBox i
        Next
    
    End Sub
    

    Salida anticipada del bucle (Exit)

    Es posible salir antes del ciclo For usando la siguiente instrucción:

    Exit For 'Salir del bucle For
    

    Consideremos un ejemplo que claramente mostrará esto:

    Sub for_loop()
        Dim max_loops As Integer
        max_loops = Range("A1") 'En la celda A1, especificamos el límite para el número de repeticiones.
    
        For i = 1 To 7 'Número esperado de ciclos: 7
           If i > max_loops Then 'Si la celda A1 está vacía o contiene un número inferior a 7, reduzca el número de repeticiones
               Exit For 'Si la condición anterior es TRUE, entonces la salida del bucle For...loop
           End If
       
           MsgBox i
        Next
    
    End Sub
    

    Otros operadores de Salir:

    Exit Do 'Salida de bucle Do Loop
    
    Exit Sub 'Salir del procedimiento
    
    Exit Function 'Función de salida