Pesquisa de site

Como usar o loop For Each no Excel VBA


Quer automatizar tarefas repetitivas no Excel usando VBA? Aprenda como usar o loop For Each para manipular dados de maneira eficiente em suas planilhas.

Loops e VBA andam juntos, e por um bom motivo. Ao lidar com objetos do Microsoft Office, como pastas de trabalho, planilhas e intervalos, os loops podem ajudá-lo a alternar entre cada um deles com relativa facilidade.

Embora mais ou menos todos os loops VBA funcionem bem com objetos, o loop "for each" é uma das melhores opções para trabalhar com coleções de objetos. Se você é novo no Excel VBA e deseja dominar o loop for each, poderá aprender rapidamente com alguns desses exemplos. Aqui está tudo o que você precisa saber sobre esse loop por excelência.

Sintaxe para cada loop

A sintaxe do loop for each é bastante semelhante ao loop for usual no Excel VBA. Aqui está a sintaxe:

For each variable_name in object_collection
[statement]
[statement]
[statement]
Next variable_name

O loop começa com a palavra-chave "for each"; você pode usar qualquer nome de variável, seguido pela coleção de objetos. O objeto no loop for each pode ser células, intervalos, planilhas e até mesmo pastas de trabalho. Tal é a beleza deste circuito; oferece flexibilidade para trabalhar com diferentes coleções do Excel.

O loop percorre cada valor da coleção e armazena a referência no nome da variável definida. Após a execução, o VBA executa as instruções armazenadas dentro do loop e passa para o próximo objeto na coleção (a palavra-chave next é útil aqui). Vamos entender a estrutura do código com um exemplo básico.

Como usar o loop For Each no Excel VBA

Suponha que você queira imprimir um número nas células A1 a A10. A melhor abordagem é usar o loop for each com a função range e deixar o código fazer o que for necessário. Veja como você pode realizar esta tarefa simples:

  1. Abra o editor de código VBA pressionando Alt + F11.
  2. Insira um módulo clicando na opção Módulo na guia Inserir.

  3. Crie uma subrotina usando o comando sub() na janela do módulo do editor de código. Certifique-se de atribuir um nome significativo à sub-rotina. Neste exemplo, você pode usar o nome for_each_loop.

Agora que o básico foi resolvido, é hora de começar a escrever o código. Dentro da sub-rotina, digite os seguintes comandos:

Dim cell as range
For each cell in Sheets("Sheet1").Range("A1:A10")
cell.value = 10
Next cell

Quando o código for executado, a variável c armazenará o valor de A1. A seguir, à medida que avança para a instrução dentro do loop, ele avalia o comando e insere um valor 10 na célula definida, ou seja, célula A1.

Finalmente, à medida que passa para a palavra-chave Next, passa para o próximo valor, ou seja, célula A2. O loop é executado até atingir a célula A10. Este é o resultado final:

Usando o loop com objetos: células, planilhas e pastas de trabalho

O Excel possui três tipos principais de objetos com os quais você trabalha regularmente. Estas são células, planilhas e pastas de trabalho. Veja como você pode usar o loop com todos os três tipos de objetos.

Trabalhando com células e loops juntos

Suponha que você queira adicionar um valor e algumas condições de formatação a um intervalo de células na Planilha1. Como primeiro passo, você precisa definir as condições dentro do loop, seguidas pelos comandos de formatação.

Digite o seguinte código em uma sub-rotina.

Sub for_each_loop()

Dim c As Range

For Each c In Sheets("Sheet1").Range("A1:A10")

With c
.Value = 10
.Font.Color = vbRed
.Font.Bold = True
.Font.Strikethrough = True

End With

Next c

End Sub

A função with é útil ao executar múltiplas funções com um objeto específico. Como você deseja realizar uma série de tarefas com a variável c, você pode combiná-las todas usando uma função with..end with.

O loop iguala o valor de c com o valor de cada célula e insere o valor como 10. Além disso, ele muda a cor da célula para vermelho, coloca o valor em negrito e o risca. Depois de concluir todas as etapas, ele passa para o próximo valor definido no intervalo.

Usando o Loop para Controlar Folhas

Semelhante ao exemplo acima, você pode usar o loop for each para controlar planilhas. Que tal mudar o nome da Plan1 para Plan3 usando VBA?

Você pode usar o seguinte código para renomear uma planilha existente no Excel usando VBA:

Sub for_each_loop_sheets()

For Each sht In ThisWorkbook.Sheets

If sht.Name = "Sheet1" Then

sht.Name = "Sheet3"

End If

Next sht

End Sub

O código percorre cada planilha da pasta de trabalho e verifica o nome de cada planilha. Se encontrar o nome Sheet1, ele o altera para Sheet3. Ele avança pelas planilhas restantes, se houver, na pasta de trabalho. Assim que a execução do código atinge a última planilha, ela sai do loop e da sub-rotina.

Entre alguns outros usos comuns, você pode mesclar várias planilhas usando VBA e atualizar o conteúdo em uma única planilha usando loops.

Alternar entre pastas de trabalho com o loop

Finalmente, você pode usar o loop for each para alternar entre diferentes pastas de trabalho e executar tarefas específicas. Vamos demonstrar esta função com um exemplo.

Você pode usar comandos VBA para adicionar três novas pastas de trabalho e fechar todas as abertas juntas. Veja como você pode fazer isso:

Sub loop_wrkbook()

Dim wrkbook as workbook

Workbooks.Add
Workbooks.Add
Workbooks.Add

For Each wrkbook In Workbooks

wrkbook.Close

Next wrkbook

End Sub

O código acima também fechará sua pasta de trabalho de macro; certifique-se de ter salvo seus códigos antes de executar este código.

Como os loops têm vários usos, você também pode consolidar dados de várias pastas de trabalho em uma única pasta de trabalho.

Usando uma instrução IF aninhada com o loop

Como no exemplo acima, você pode usar uma instrução IF dentro do loop para verificar condições específicas. Vamos alterar a cor de fundo da célula com base nos valores da célula.

Existem alguns números aleatórios nas células A1:A20. Você pode escrever um loop para percorrer cada célula do intervalo; se o valor da célula for menor que 10, a cor da célula deverá mudar para vermelho. Se o valor da célula exceder 10, ela deverá ficar verde. Use o seguinte código para esta finalidade:

Sub loop_w_if()

Dim c As Range

For Each c In Sheets("Sheet4").Range("A1:A20")

If c.Value < 10 Then
c.Interior.ColorIndex = 3

Else: c.Interior.ColorIndex = 4
End If

Next c

End Sub

Esta é a aparência da saída:

Usando Loops no Excel VBA

O Excel VBA não está restrito apenas ao loop for each. Há uma variedade de loops úteis que permitem executar diferentes funções com facilidade. Dê adeus às tarefas manuais mundanas, já que os loops do VBA, como o loop for, os loops do while e do Until, entram em ação para tornar sua vida mais fácil.