Loops VBA no Excel: For Next, Do While, Do Until, For Each (Com Exemplos)

Você já ouviu falar em Loops VBA? Quando se trata de aproveitar ao máximo o Excel e O VBA, você precisa saber como usar loops de maneira eficiente.

Basicamente os loops do VBA são comandos que permitem que você passe por um conjunto de objetos / valores e analise um por um. Você também pode executar tarefas específicas para cada loop.

Precisa destacar as células pares em um conjunto de dados? Ou que tal proteger todas as suas planilhas de sua pasta de trabalho com um único clique? Com os loops no VBA é possível fazer isso e muito mais.

Neste guia você irá conhecer através de exemplos os seguintes loops VBA: For Next, Do While, Do Until e For Each. Se interessou? Então confira os detalhes a seguir:

Navegue pelos tópicos de seu interesse:

Loops VBA: Quando usar?

Loops VBA Como e Quando usar

Alguns exemplos mais práticos onde os loops do VBA podem ser úteis:

  • Percorrer um intervalo de células, analisando cada célula (realce as células com um texto específico).
  • Percorrer todas as planilhas e fazendo algo com cada uma (como protegê-las / desprotegê-las).
  • Percorrer por todas as pastas de trabalho abertas (e salvar cada pasta de trabalho ou fechar todas, exceto a pasta de trabalho ativa).
  • Faça um loop por todos os caracteres em uma célula (e extraia a parte numérica de uma string).
  • Faça um loop em todos os valores de uma matriz.
  • Faça um loop em todos os gráficos / objetos (e aplique uma borda ou altere a cor do plano de fundo).

Agora que você já sabe onde usar os Loops VBA na prática, vamos conhecer os diferentes tipos existentes e a sintaxe correta de cada um.

Loop VBA: For Next

O loop ‘For Next’ basicamente permite que você execute um bloco de comandos por número especificado de vezes.

Por exemplo, se eu pedir para você somar os números inteiros de 1 a 10 manualmente, você somaria os dois primeiros números, depois somaria o terceiro número ao resultado e, em seguida, somaria o quarto número ao resultado e assim por diante.

A mesma lógica é usada no loop For Next no VBA. Ou seja, você especifica quantas vezes deseja que o loop seja executado e também especifica o que deseja que o código faça toda vez que o loop for executado.

Abaixo está a sintaxe do loop For Next no VBA:

For Contador = Início To Fim [Quantidade de etapas]
[Bloco de código para executar]
Next [contador]

No loop For Next, você pode usar um contador (ou qualquer variável) que será usado para executar o loop. Esse contador permite que você execute este loop por um número necessário de vezes.

Por exemplo, se você quiser somar os 10 primeiros números inteiros positivos, o valor do seu contador será de 1 a 10.

Confira a seguir alguns exemplos para entender na prática como funciona o loop For Next no VBA.

Exemplo 1: Somando os primeiros 10 inteiros positivos

O exemplo abaixo mostra o código que irá somar os primeiros 10 números inteiros positivos usando um loop For Next. Em seguida, irá exibir uma caixa de mensagem mostrando a soma desses números.

Sub Somanumeros()
Dim Total As Integer
Dim Contar As Integer
Total = 0
For Contar = 1 To 10
Total = Total + Contar
Next Contar
MsgBox Total
End Sub

Observe que neste código, o valor de Total é definido como 0 antes de entrar no loop For Next. Depois de entrar no loop, ele mantém o valor total após cada loop. Portanto, após o primeiro loop, quando Contar é 1, o valor ‘Total’ torna-se 1 e, após o segundo, torna-se 3 (1 + 2), e assim por diante.

E finalmente, quando o loop termina, a variável ‘Total’ tem a soma dos 10 primeiros inteiros positivos e uma MsgBox simplesmente exibe o resultado em uma caixa de mensagem.

Loops VBA: Como usar o For Next



Exemplo 2: Somando os primeiros 5 números inteiros positivos pares

Para somar os primeiros cinco inteiros positivos iguais (ou seja, 2, 4, 6, 8 e 10), você precisa de um código semelhante com uma condição para considerar apenas os números pares e ignorar os números ímpares.

Veja o código abaixo:

Sub SomarPares()
Dim Total As Integer
Dim Soma As Integer
Total = 0
For Soma = 2 To 10 Step 2
Total = Total + Soma
Next Soma
MsgBox Total
End Sub

Note que começamos o valor de contagem em 2 e também usamos o “Step 2“.

O ‘Step 2‘ diz ao código para incrementar o valor ‘Soma’ em 2 toda vez que o loop for executado. Deste modo, o valor de contagem começa de 2 e, em seguida, torna-se 4, 6, 8 e 10 como ocorre o loop.

NOTA: Outra maneira de fazer isso é executar o loop de 1 a 10 e, no loop, verificar se o número é par ou ímpar. No entanto, usar o Step, nesse caso, é uma maneira mais eficiente, pois não exige que o loop seja executado 10 vezes, mas apenas 5 vezes.

Somando os primeiros 5 números inteiros positivos pares VBA

Exemplo 3: Inserindo números em série em células selecionadas

Você também pode usar o loop For Next para percorrer uma coleção de objetos (como células ou planilhas ou pastas de trabalho). No exemplo, estamos inserindo números em série em todas as células selecionadas.

Sub InserirNúmerosEmSérie()
Dim Rng As Range
Dim Contador As Integer
Dim ContarLinhas As Integer
Set Rng = Selection
ContarLinhas = Rng.Rows.Count
For Contador = 1 To ContarLinhas
ActiveCell.Offset(Contador - 1, 0).Value = Contador
Next Contador
End Sub

Observe que o código acima conta primeiro o número de linhas selecionadas e, em seguida, atribui esse valor à variável ContarLinhas. Em seguida, executamos o loop de ‘1 to ContarLinhas‘.

Observe também que, como a seleção pode ser qualquer número de linhas, definimos a variável Rng como Selection (com a linha ‘Set Rng = Selection’). Deste modo, agora podemos usar a variável ‘Rng’ para nos referirmos à seleção em nosso código.

Como inserir números em série em células selecionadas VBA

Exemplo 4: Protegendo todas as planilhas na pasta de trabalho ativa

Você também pode usar o loop VBA ‘For Next’ para percorrer todas as planilhas na pasta de trabalho ativa e proteger (ou desproteger) cada uma das planilhas. Confira abaixo o código que fará isso:

Sub ProtegerPlanilhas()
Dim i As Integer
For i = 1 To ActiveWorkbook.Worksheets.Count
Worksheets(i).Protect
Next i
End Sub

Observe que código acima conta o número de planilhas usando ActiveWorkbook.Worksheets.Count. Isso informa ao VBA quantas vezes o loop deverá ser executado.

Você pode usar esse mesmo código para desproteger planilhas também. Para isso, basta alterar a linha Worksheets(i).Protect para Worksheets(i).UnProtect.

Usando loops For Next aninhados

Assim como nas tradicionais funções do Excel, você também pode usar loops ‘For Next’ aninhados para obter uma automação mais complexa. Um loop ‘For Next’ aninhado significa que há um loop ‘For Next’ dentro de outro loop ‘For Next’.

Por exemplo: Suponha que eu tenha 4 pastas de trabalho abertas em seu computador e deseja proteger todas as planilhas em todas essas pastas de trabalho. Abaixo está o código que fará isso:

Sub ProtegerPastasdeTrabalho()
Dim i As Integer
Dim j As Integer
For i = 1 To Workbooks.Count
For j = 1 To Workbooks(i).Worksheets.Count
Workbooks(i).Worksheets(j).Protect
Next j
Next i
End Sub




Usando ‘EXIT For’ em loops For Next

A instrução ‘Exit For’ permite que você saia do loop ‘For Next’ completamente. Você pode usá-la nos casos em que deseja que o loop For Next termine quando uma determinada condição for atendida.

Vamos dar um exemplo onde você tem um conjunto de números na coluna A e você deseja destacar todos os números negativos na fonte vermelha. Nesse caso, precisamos analisar o valor de cada célula e, em seguida, alterar a cor da fonte de acordo.

Mas, para tornar o código mais eficiente, podemos primeiro verificar se há algum valor negativo na lista ou não. Se não houver valores negativos, podemos usar a instrução Exit For para simplesmente sair do código. Abaixo está o código que faz isso:

Sub DestacarNegativos()
Dim Rng As Range
Set Rng = Range("A1", Range("A1").End(xlDown))
Contador = Rng.Count
For i = 1 To Contador
If WorksheetFunction.Min(Rng) >= 0 Then Exit For
If Rng(i).Value < 0 Then Rng(i).Font.Color = vbRed
Next i
End Sub

Usando 'EXIT For' em loops VBA For Next

Quando você usa a instrução ‘Exit For’ dentro de um loop ‘For Next’ aninhado, ele sairá do loop no qual ele é executado e executará a próxima linha no código após o loop For Next.

Por exemplo, no código abaixo, a instrução ‘Exit For‘ fará você sair do loop interno, mas o loop externo continuará funcionando.

Sub CódigoTeste()
For i = 1 To 10
For j = 1 To 10
Exit For
Next j
Next i
End Sub

Loop VBA: Do While

Um loop ‘Do While’ permite verificar uma condição e executar o loop enquanto essa condição é atendida (ou seja, enquanto ela for VERDADEIRA). Existem dois tipos de sintaxe no loop Do While.

Do [Enquanto uma condição]
[Bloco de código para executar]
Loop

e

Do 
[Bloco de código para executar]
Loop [While - condição atendida]

A diferença entre estes dois é que no primeiro, a condição While é verificada primeiro antes de qualquer bloco de código ser executado, e no segundo caso, o bloco de código é executado primeiro e depois a condição While é verificada.

Isso significa que, se a condição While for False para ambos os casos, o código ainda será executado pelo menos uma vez no segundo caso (já que a condição ‘While’ é verificada após o código ter sido executado uma vez).

Agora vamos conferir alguns exemplos de uso de loops Do While no VBA.

Exemplo 1: Somando os primeiros 10 números inteiros positivos usando o VBA

Suponha que você queira somar os primeiros dez inteiros positivos usando o loop Do While no VBA.

Para fazer isso, você pode usar o loop Do While até que o próximo número seja menor ou igual a 10. Assim que o número for maior que 10, o loop será interrompido.

Abaixo está o código VBA que executará esse loop Do While e mostrará o resultado em uma caixa de mensagem.

Sub Somar10primeirosinteiros()
Dim i As Integer
i = 1
Do While i <= 10
Resulto = Resulto + i
i = i + 1
Loop
MsgBox Resulto
End Sub

O loop acima continua a ser executado até que o valor de ‘i’ se torne 11. Assim que se torna 11, o loop termina (pois condição While se torna False).

Dentro do loop, usamos uma variável Resulto que contém o valor final. Uma vez que o loop é completado, uma caixa de mensagem mostra o valor da variável ‘Resulto’.Loops VBA: Do While exemplo




Exemplo 2: Inserir datas para o mês atual

Em um outro exemplo, digamos que você queira inserir todas as datas do mês atual em uma coluna da planilha. Você pode fazer isso usando o seguinte código de loop Do While:

Sub InsereDatasMesAtual()
Dim MAData As Date
Dim i As Integer
i = 0
MAData = DateSerial(Year(Date), Month(Date), 1)
Do While Month(MAData) = Month(Date)
Range("A1").Offset(i, 0) = MAData
i = i + 1
MAData = MAData + 1
Loop
End Sub

O código acima deve inserir todas as datas na primeira coluna da planilha (a partir de A1). Os loops continuam até o valor Month da variável ‘MAData’ corresponder ao valor do mês atual.

Saindo do loop Do While

Para sair do loop, você pode usar a instrução Exit Do. Assim que o código executa a linha ‘Exit Do’, ele sai do loop Do While e passa o controle para a próxima linha logo após o loop.

Por exemplo, se você deseja inserir apenas as 10 primeiras datas, poderá sair do loop assim que as 10 primeiras datas forem inseridas. O código abaixo fará isso:

Sub Inserir10PrimeirasDatas()
Dim MAData As Date
Dim i As Integer
i = 0
MAData = DateSerial(Year(Date), Month(Date), 1)
Do While Month(MAData) = Month(Date)
Range("A1").Offset(i, 0) = MAData
i = i + 1
If i >= 10 Then Exit Do
MAData = MAData + 1
Loop
End Sub

Note que no código acima, a instrução IF é usada para verificar se o valor de i é maior que 10 ou não. Assim que o valor de ‘i’ se torna 10, a instrução Exit Do é executada e o loop é finalizado.

Loop VBA: Do Until

Os loops ‘Do Until’ são muito parecidos com os loops ‘Do While’. Em ‘Do While’, o loop é executado até que a condição especificada seja atendida, enquanto em ‘Do Until’, faz um loop até que a condição especificada seja atendida. Existem dois tipos de sintaxe para o loop Do Until.

Do [Until condição]
[Bloco de código para executar]
Loop

e

Do
[Bloco de código para executar]
Loop [Until condição]

A diferença entre estes dois é que no primeiro, a condição Until é verificada primeiro antes de qualquer bloco de código ser executado, e no segundo caso, o bloco de código é executado primeiro e depois a condição Until é verificada.

Isto significa que se a condição Until for TRUE para ambos os casos, o código ainda será executado pelo menos uma vez no segundo caso (como a condição ‘Until’ é verificada após o código ter sido executado uma vez).

Agora vamos ver alguns exemplos de uso de loops Do Until no VBA.

Nota: Todos os exemplos de uso do loop Do Until são os mesmos do Do While. Eles foram modificados apenas para mostrar como o loop Do Until funciona.

Exemplo 1: Somar os primeiros 10 números inteiros positivos usando o VBA

Suponha que você queira somar os primeiros dez inteiros positivos usando o loop Do Until no VBA.

Para fazer isso, você precisa executar o loop até que o próximo número seja menor ou igual a 10. Assim que o número for maior que 10, o loop será interrompido. Abaixo está o código VBA que executará este loop e mostrará o resultado em uma caixa de mensagem.

Sub Somar10PrimeirosInteiros()
Dim i As Integer
i = 1
Do Until i > 10
Resulto = Resulto + i
i = i + 1
Loop
MsgBox Resulto
End Sub

O loop acima funciona até que o valor de ‘i’ se torne 11. Assim que ele se torna 11, o loop termina (conforme a condição ‘Until’ se torna True).

Exemplo 2: Inserir datas para o mês atual

Digamos que você queira inserir todas as datas do mês atual em uma coluna da planilha. Você pode fazer isso usando o loop Do Until da seguinte maneira:

Sub InserirDatasdoMês()
Dim DataAtual As Date
Dim i As Integer
i = 0
DataAtual = DateSerial(Year(Date), Month(Date), 1)
Do Until Month(DataAtual) <> Month(Date)
Range("A1").Offset(i, 0) = DataAtual
i = i + 1
DataAtual = DataAtual + 1
Loop
End Sub

O código acima insere todas as datas na primeira coluna da planilha (a partir de A1). O loop continua até que o mês da variável DataAtual não seja igual ao mês atual.

Loops VBA: Do Until exemplo




Saindo do loop Do Until

Você pode usar a instrução ‘Exit Do’ para sair do loop. Assim que o código executa a linha ‘Exit Do’, ele sai do loop Do Until e passa o controle para a próxima linha logo após o loop.

Por exemplo, se você deseja inserir apenas as 10 primeiras datas, poderá sair do loop assim que as 10 primeiras datas forem inseridas. Veja o exemplo do código abaixo:

Sub Inserir10PrimeirasDatas()
Dim DataAtual As Date
Dim i As Integer
i = 0
DataAtual = DateSerial(Year(Date), Month(Date), 1)
Do Until Month(DataAtual) <> Month(Date)
Range("A1").Offset(i, 0) = DataAtual
i = i + 1
If i >= 10 Then Exit Do
DataAtual = DataAtual + 1
Loop
End Sub

No código acima, assim que o valor de ‘i’ se torna 10, a instrução Exit Do é executada e o loop termina.

Loop VBA: For Each

No VBA, você pode percorrer um conjunto de coleções usando o loop ‘For Each‘. Alguns exemplos de coleções no Excel VBA são:

  • Uma coleção de todas as pastas de trabalho abertas.
  • Uma coleção de todas as planilhas em uma pasta de trabalho.
  • Uma coleção de todas as células em um intervalo de células selecionadas.
  • Uma coleção de todos os gráficos ou formas na pasta de trabalho.

Usando o loop ‘For Each’, você pode percorrer cada um dos objetos em uma coleção e executar alguma ação nela.

Por exemplo, você pode percorrer todas as planilhas em uma pasta de trabalho e protegê-las ou percorrer todas as células da seleção e alterar a formatação.

Com o loop ‘For Each’ (também conhecido como o loop ‘For Each-Next’), você não precisa saber quantos objetos existem em uma coleção.

O loop ‘For Each’ passaria automaticamente por cada objeto e executaria a ação especificada. Por exemplo, se você quiser proteger todas as planilhas em uma pasta de trabalho, o código será o mesmo se você tiver uma pasta de trabalho com 3 planilhas ou 100 planilhas.

A sintaxe do loop For Each-Next no Excel VBA é:

For Each elemento In coleção
[Bloco de código para executar]
Next [elemento]

Agora vamos ver alguns exemplos de uso do For Each Loop no Excel.

Exemplo 1: Percorrer todas as planilhas em uma pasta de trabalho e protegê-las

Suponha que você tenha uma pasta de trabalho na qual deseja proteger todas as planilhas. Abaixo do loop Each-Next, você pode fazer isso da seguinte maneira:

Sub ProtegerPlanilhas()
Dim plan As Worksheet
For Each plan In ActiveWorkbook.Worksheets
plan.Protect
Next plan
End Sub

Observe que código acima definimos a variável “plan” como um objeto de planilha. Isso informa ao VBA que ‘plan’ deve ser interpretado como um objeto de planilha no código.

Agora, usamos o loop ‘For Each’ para percorrer cada ‘plan’ (que é um objeto de planilha) na coleção de todas as planilhas na pasta de trabalho ativa (fornecida por ActiveWorkbook.Worksheets).

Note que, diferentemente de outros loops nos quais tentamos proteger todas as planilhas em uma pasta de trabalho, não precisamos nos preocupar com quantas planilhas estão lá na pasta de trabalho. Nós não precisamos contá-las para executar o loop. O loop For Each garante que todos os objetos sejam analisados ​​um por um.

Exemplo 2: Percorrer todas as pastas de trabalho abertas e salvá-las

Se você trabalha com várias pastas de trabalho ao mesmo tempo, esse exemplo pode ser útil para salvar todas essas pastas de trabalho de uma só vez. Confira o código abaixo:

Sub SalvarPastasdeTrabalho()
Dim PastaTrabalho As Workbook
For Each PastaTrabalho In Workbooks
PastaTrabalho.Save
Next PastaTrabalho
End Sub

Note que nesse código, você não recebe um aviso que solicita que você salve a pasta de trabalho em um local específico (se estiver salvando-a pela primeira vez).

Ele salva na pasta padrão (era a pasta ‘Documentos’ no meu caso). Esse código funciona melhor quando esses arquivos já estão salvos e você está fazendo alterações e deseja salvar todas as pastas de trabalho rapidamente.

Exemplo 3: Percorrer Todas as Células em uma Seleção e destacar valores negativos

Usando o loop ‘For Each’, você também pode percorrer todas as células em um intervalo específico ou no intervalo selecionado. Isso pode ser útil quando você deseja analisar cada célula e executar uma ação com base nela.

Por exemplo, o código abaixo irá percorrer todas as células na seleção e irá alterar a cor da célula das células com valores negativos para vermelho.

Sub DestacarNegativos()
Dim Celula As Range
For Each Celula In Selection
If Celula.Value < 0 Then
Celula.Interior.Color = vbRed
End If
Next Celula
End Sub

No código acima, o loop For Each-Next percorre a coleção de células na seleção. A instrução IF é usada para identificar se o valor da célula é negativo ou não. No caso, a célula recebe uma cor vermelha de preenchimento, senão vai para a próxima célula.

Loops VBAs For Each exemplo

Caso você não tenha uma seleção, e ao invés disso queira que o VBA selecione todas as células preenchidas em uma coluna, começando de uma célula específica (assim como usamos Ctrl + Shift + Seta para Baixo para selecionar todas as células preenchidas), você pode use o código abaixo:

Sub DestacarNegativo()
Dim Celula As Range
Dim Intervalo As Range
Set Intervalo = Range("A1", Range("A1").End(xlDown))
For Each Celula In Intervalo
If Celula.Value < 0 Then
Celula.Interior.Color = vbRed
End If
Next Celula
End Sub

Observe no exemplo acima que não importa quantas células preenchidas existem. O loop iniciará da célula A1 e analisará todas as células contíguas preenchidas na coluna.

Neste caso, você também não precisa ter a célula A1 selecionada. Você pode ter qualquer célula distante selecionada e quando o código for executado, ele ainda considerar todas as células na coluna A (iniciando em A1) e irá preencher as células com valores negativos.

destacar valores negativos no VBA




Saindo do loop For Each

Você pode usar a instrução ‘Exit For’ no loop For Each-Next para sair do loop. Isso geralmente é feito no caso de uma condição específica ser atendida.

Por exemplo, no Exemplo 3, como estamos passando por um conjunto de células, pode ser mais eficiente verificar se há algum valor negativo ou não. Caso não haja valores negativos, podemos simplesmente sair do loop e economizar algum tempo de processamento do VBA. Confira o código abaixo:

Sub DestacarNegativas()
Dim Celula As Range
For Each Celula In Selection
If WorksheetFunction.Min(Selection) >= 0 Then Exit For
If Celula.Value < 0 Then
Celula.Interior.Color = vbRed
End If
Next Celula
End Sub

Onde colocar o código VBA?

Se você é iniciante na programação VBA e ainda não sabe onde inserir os códigos citados neste tutorial, fique tranquilo! Confira o passo a passo a seguir:

1. Acesse a guia Desenvolvedor (Se a guia Desenvolvedor do seu Excel não estiver habilitada, confira aqui como habilitá-la).

Excel guia desenvolvedor exibir

2. Clique na opção Visual Basic. Isto irá abrir o editor VB.

botão Visual Basic Excel

3. No painel Project Explorer no Editor do VB, clique com o botão direito do mouse em qualquer objeto para a pasta de trabalho na qual você deseja inserir o código. Se você não vir o Project Explorer, acesse a guia Exibir e clique em Project Explorer.

4. Vá para Inserir e clique em Módulo. Isso irá inserir um objeto de módulo para sua pasta de trabalho.

Como inserir um Módulo no Excel VBA

5. Copie e cole o código na janela do Módulo.

Como inserir um código no VBA

Confira também:

E então, o que achou da dica sobre Loops VBA? Deixe o seu comentário abaixo, gostaríamos muito de conhecer a sua opinião! Para conferir mais dicas de Excel, continue acompanhando o Excel Easy!