0028-Trabalhando com Loops

Podemos definir que um loop é uma estrutura de programação que permite um ou mais comandos sejam repetidos até que seja satisfeita uma determinada condição. São exemplos de demandas que exigem o uso de loops: pesquisar um valor em todas as planilhas de um arquivo, percorrer todas linhas preenchidas de uma coluna ou consolidar todos os arquivos de uma pasta num único arquivo.
Há diversas formas de construirmos um loop no VBA e, muitas vezes, é possível utilizar diferentes abordagens para a solução de um mesmo problema. A partir do problema a seguir, construiremos diferentes versões do códigos, utilizando, em cada uma delas, uma diferente estrutura de loop.
“É necessário percorrer todas as planilhas de uma pasta de trabalho e, em cada uma delas, formatar a fonte da célula A1 como Arial, em negrito e com tamanho 16”
Antes de montarmos os loops, vejamos como ficariam as linhas de código equivalentes ao problema proposto.

[A1].Font.Name="Arial"
[A1].Font.Bold=True
[A1].Font.Size=16

Estas instruções podem ser condensadas numa estrutura mais enxuta:

With [A1].Font
    .Name = "Arial"
    .Bold = True
    .Size = 16
End With

Observem que não há menção à planilha, de foma que o código acima seria executado apenas na planilha ativa do arquivo. É necessário informar também a planilha, caso queiramos que o código seja executado em outras planilhas. Se o fizéssemos para uma planilha chamada “Teste”, eis como ficaria o código:

With Worksheets("Teste").[A1].Font
    .Name = "Arial"
    .Bold = True
    .Size = 16
End With

1ª versão – For counter = Start To Finish Step … Next counter

Esta estrutura de Loop é baseada na repetição dos comandos um número de vezes equivalente ao um contador inteiro.

No nosso exemplo, o Loop deve ser executado para cada uma das planilhas da pasta de trabalho.

As planilhas são denominadas como Worksheets(1), Worksheets(2),…Worksheets(N), sendo N o número de planilhas na pasta de trabalho. Precisamos, então determinar o valor de N para definir quando o Loop deve ser concluído.

As coleções de objetos no VBA possuem uma propriedade chamada Count. Desta forma para determinarmos a quantidade de planilhas na pasta de trabalho que contém as macros, podemos utilizar a linha de comando

Thisworkbook.Worksheets.Count

É necessário criar uma variável que sirva como contador. As mais utilizadas são as letras minúsculas a partir da letra i (i,j,k,etc).

O argumento Step define o valor que será adicionado ao contador a cada iteração do loop. Também pode assumir valores negativos, o que é necessário em algumas situações. O argumento pode ser omitido, sendo neste caso igual a 1 (um).

Vejamos então como ficaria o código:

Sub Formatar_A1_Versao1()
    For i = 1 To ThisWorkbook.Worksheets.Count Step 1
        With Worksheets(i).[A1].Font
        .Name = "Arial"
        .Bold = True
        .Size = 16
        End With
    Next i
End Sub

2ª versão – For Each Object In Collection…..Next Object

Nesta outra versão do Loop, não é necessário definir um contador. Serão percorridos todos os elementos de uma coleção de objetos. Sem querer nos aprofundar muito no tema, podemos definir uma coleção como uma coleção de objetos similares. Exemplos. Uma pasta de trabalho possui, dentre outras, uma coleção de planilhas. Um intervalo é constituído por uma coleção de células.

No exemplo, teremos que percorrer todas as planilhas (Worksheets) da coleção de planilhas na pasta de trabalho (Thisworkbook.Worksheets). É necessário criar uma variável para o Loop que assumirá o objeto designado a cada iteração (repetição).

A versão do nosso código fica então na forma abaixo. Observem as similaridades com a estrutura anterior.

Sub Formatar_A1_Versao2()
    For Each ws In ThisWorkbook.Worksheets
        With ws.[A1].Font
        .Name = "Arial"
        .Bold = True
        .Size = 16
        End With
    Next ws
End Sub

3ª versão – Do While Condition…Loop

Nesta estrutura de Loop, as instruções serão repetidas até que a condição estabelecida seja verdadeira. O Loop é interrompido quando detecta o valor falso.

Sub Formatar_A1_Versao3()
    i = 0
    Do While i < ThisWorkbook.Worksheets.Count
      With Worksheets(i).[A1].Font
        .Name = "Arial"
        .Bold = True
        .Size = 16
        End With
        i = i + 1
    Loop
End Sub

4ª versão – Do …Loop Until Condition

Esta estrutura é similar à primeira, sendo que o Loop é interrompido antes que se realize a próxima iteração. Observe como foi necessário modificar a condição, quando comparada com a versão anterior.

Sub Formatar_A1_Versao4()
    i = 0
    Do
      With Worksheets(i).[A1].Font
        .Name = "Arial"
        .Bold = True
        .Size = 16
        End With
        i = i + 1
    Loop Until i <= ThisWorkbook.Worksheets.Count
End Sub

5ª versão – While Condition…Wend

Similar à nossa 4ª versão, é uma forma menos estruturada, mas ainda assim válida.

Sub Formatar_A1_Versao5()
    i = 0
    While i < ThisWorkbook.Worksheets.Count
      With Worksheets(i).[A1].Font
        .Name = "Arial"
        .Bold = True
        .Size = 16
        End With
        i = i + 1
    Wend
End Sub

Considerações:

A esta altura você pode se perguntar: Afinal qual a melhor forma então de realizar o Loop?

A resposta é que isto depende de diversas razões que vão desde a facilidade de implementação do código ao gosto pessoal do programador. É importante conhecer várias alternativas para que possa ser feita a opção por aquela mais adequada ao código em desenvolvimento.

Veremos diversos exemplos de uso de Loops em posts futuros. Proponho como exercício que tentem desenvolver versões alternativas utilizando diferentes estruturas.

Anúncios

In Excel We Trust

Marcado com: ,
Publicado em Nível: Avançado
2 comentários em “0028-Trabalhando com Loops
  1. diogo gimenez disse:

    Nao esta mudando de planilha , ele so fica dando loop na mesma planilha e nao muda as outras , oq fazer?

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

Visitas dos usuários
  • 2,077,129

Clique para assinar este blog e receber notificações de novos artigos por email.

Junte-se a 1.537 outros seguidores

Aumente sua interação

Siga-nos do twitter (@usuariosdoexcel).

Acesse o nosso fórum e compartilhe as suas dúvidas.

Curta nossa página no Facebook.

Junte-se ao grupo do LinkedIn.

Visite-nos utilizando o seu smartphone ou tablet.

Recomende este Blog
Visualizar notícias
Site monitorado:
Real Time Web Analytics

Clicky

%d blogueiros gostam disto: