.
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.
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:
- Abra o editor de código VBA pressionando Alt + F11.
- Insira um módulo clicando no botão Módulo opção dentro do Inserir aba.
- 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 rangeFor 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:
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
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
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
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:
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.
.







