technology

Como usar o loop For Each no Excel VBA

.

Loops e VBA andam juntos, e por um bom motivo também. 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, pode aprender rapidamente com alguns desses exemplos. Aqui está tudo o que você precisa saber sobre esse loop por excelência.

MAKEUSEDO VÍDEO DO DIAROLE PARA CONTINUAR COM O CONTEÚDO

Para a sintaxe de 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 em cada loop pode ser células, intervalos, planilhas e até pastas de trabalho. Tal é a beleza deste loop; oferece a flexibilidade de trabalhar com diferentes coleções do Excel.

O loop percorre cada valor de 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 no loop e move para o próximo objeto na coleção (o próximo palavra-chave é ú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 for each loop com a função range e deixar o código fazer o necessário. Veja como você pode fazer essa tarefa simples:

  1. Abra o editor de código VBA pressionando Alt + F11.
  2. Insira um módulo clicando no botão Módulo opção dentro do Inserir aba.
    Submenu suspenso no editor de código do Excel VBA

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

Agora que o básico está fora do caminho, é 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 é executado, o c variável irá armazenar o valor de A1. Em seguida, ao passar para a instrução dentro do loop, ele avalia o comando e insere o valor 10 na célula definida, ou seja, a célula A1.

Por fim, ao passar para a palavra-chave Next, ele passa para o próximo valor, ou seja, a célula A2. O loop é executado até atingir a célula A10. Esta é a saída final:

Planilha do Excel com uma saída de coluna

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

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

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 em Sheet1. Como primeiro passo, você precisa definir as condições dentro do loop, seguidas dos comandos de formatação.

Digite o seguinte código dentro de 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

Trecho de código VBA dentro do editor e saída do Excel

O com A função é útil ao executar várias funções com um objeto específico. Como você deseja executar uma série de tarefas com a variável c, você pode combiná-las usando a 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 altera a cor da célula para vermelho, coloca o valor em negrito e o risca. Depois de concluir todas as etapas, ele se move para o próximo valor definido no intervalo.

Usando o loop para planilhas de controle

Semelhante ao exemplo acima, você pode usar o loop for each para controlar as planilhas. Que tal mudar o nome de Sheet1 para Sheet3 usando VBA?

Você pode usar o seguinte código para renomear uma planilha existente no Excel usando o 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

Trecho de código VBA dentro do editor de codificação

O código percorre cada planilha dentro 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, dentro da pasta de trabalho. Uma vez 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

Por fim, você pode usar o loop for each para alternar entre pastas de trabalho diferentes 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

Trecho de código VBA dentro do editor

O código acima fechará sua pasta de trabalho de macro também; 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 especificada no intervalo; se o valor da célula for menor que 10, a cor da célula deve mudar para vermelho. Se o valor da célula exceder 10, ela deve 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

É assim que a saída se parece:

Código com o uso de for each loop e a instrução IF no Excel VBA

Usando loops no Excel VBA

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

.

Mostrar mais

Artigos relacionados

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Botão Voltar ao topo