TOP

VBA-Lição 8.1. Loops (Loops)

Os loops repetem as instruções várias vezes e podem economizar muito tempo.

Os seguintes tipos de loops existem em Excel VBA:

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

  • O código a seguir insere uma sequência de números em cada célula da coluna A (de 1 a 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
    

    Esse código é muito repetitivo...

    Imagine se tivéssemos que inserir números consecutivos em centenas de células em vez de apenas 12... Agora você entende porque os loops são tão úteis.

    WHILE ... WEND

    Vamos dar um exemplo de ciclo vazio While:

    Sub while_loop()
    
        While [doença]
            'Instruções
        Wend
    
    End Sub
    

    Enquanto a condição for verdadeira, as instruções no loop continuarão a ser executadas (mas tome cuidado para não criar um loop infinito).

    Abaixo está a macro de loop discutida anteriormente, transformada em um loop While:

    Sub while_loop()
    
        Dim num As Integer
        num = 1 'O número inicial (neste caso, é o número da linha e o valor que está sendo definido)
    
        While num <= 12 'Contanto que a variável num seja menor ou igual a 12, as instruções serão executadas
           Cells(num, 1) = num 'Numeração
           num = num + 1 'O número é incrementado em 1 cada vez que o loop passa
        Wend
           
    End Sub
    

    Usando esse loop em uma macro, tudo o que teríamos que fazer se precisássemos de 400 fitas em vez de 12 seria substituir 12 por 400.

    DO ... LOOP

    Existe outra maneira de escrever um loop que funciona da mesma forma que While Wend (executando enquanto uma determinada condição contida no comando While for verdadeira):

    Sub do_while_loop()
    
        Do While [doença]
            'Instruções
        Loop
    
    End Sub
    

    A versão a seguir mostra que a condição pode ser escrita no final do loop Do Loop, o que significa que as instruções serão executadas exatamente pelo menos uma vez:

    Sub do_while_loop()
    
        Do
            'Instruções
        Loop While [doença]
    
    End Sub
    

    Em vez de fazer um loop enquanto a condição é cumprida, também podemos sair do loop por condição se substituirmos While por Until:

    Sub do_while_loop()
    
        Do Until [doença]
            'Instruções
        Loop
    
    End Sub
    

    FOR ... TO ... NEXT

    Sub for_loop()
    
        For i = 1 To 5
            'Instruções
        Next
    
    End Sub
    

    O loop For será repetido aqui 5 vezes.

    Cada vez que este ciclo é repetido, a variável i é automaticamente aumentada em 1:

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

    Saída antecipada do loop (Exit)

    É possível sair do loop For antecipadamente usando a seguinte instrução:

    Exit For 'Sair do loop For
    

    Vamos considerar um exemplo que mostrará isso claramente:

    Sub for_loop()
        Dim max_loops As Integer
        max_loops = Range("A1") 'Na célula A1, especificamos o limite para o número de repetições
    
        For i = 1 To 7 'Número esperado de ciclos: 7
           If i > max_loops Then 'Se a célula A1 estiver vazia ou contiver um número menor que 7, reduza o número de repetições
               Exit For 'Se a condição anterior for TRUE, então a saída do loop For...loop
           End If
       
           MsgBox i
        Next
    
    End Sub
    

    Outros operadores Exit:

    Exit Do 'Saída de loop Do Loop
    
    Exit Sub 'Sair do procedimento
    
    Exit Function 'Função de saída