Você está na página 1de 8

Um Loop Do conta as linhas em um intervalo de dados at encontrar uma linha vazia.

Suponha que voc queira contar o nmero de linhas em um intervalo de dados que s vezes pode ser pequeno e s vezes muito grande. Para isso, voc usaria um Loop Do.... Esse tipo de loop executa uma ao quantas vezes forem necessrias. Ele contaria qualquer quantidade de linhas que encontrasse no intervalo. Ou ento, suponha que voc queira executar a mesma ao em dois intervalos de dados contendo nmeros diferentes de linhas. Novamente, voc usaria um Loop Do.... O loop seria executado quantas vezes fossem necessrias para cada um dos dois intervalos. Mas como o loop sabe o que necessrio? Voc indica a ele. O loop encerra a sua execuo quando encontra um item especfico de dados, como uma linha em branco ou um determinado texto. Voc usa a condio While ou a condio Until para especificar quando o Loop Do... deve parar. Enquanto algo permanecer verdadeiro, ou at que algo seja verdadeiro, o loop continuar sendo executado. Portanto, para criar um loop que pare quando encontrar uma clula vazia na primeira coluna, voc usaria a condio While da seguinte maneira:

Aqui a condio While est sendo usada de forma que o loop continue sendo executado enquanto a clula que est sendo processada no estiver vazia. A linha que est sendo processada x e (x,1) a primeira clula dessa linha. Quando so usados conjuntamente, os sinais <> significam " diferente de". As aspas sem nada entre elas indicam uma clula vazia. Para que o loop continuasse a ser executado at encontrar uma clula contendo o nmero 365, voc usaria a condio Until. Em ambos os casos, voc quem determina ao loop como saber que chegou o momento de parar.

Um Loop For EachNext torna a palavra "OK" mais escura que o restante do texto em qualquer parte de uma seleo

O loop For EachNext utilizado para executar uma ao em todas as clulas de um intervalo de dados. Suponha, por exemplo, que voc queira tornar a palavra "OK" mais escura que o restante do texto em qualquer parte de um intervalo selecionado. Seu cdigo ficaria assim:

"MyCell" significa qualquer clula que o loop esteja processando no momento e "For Each" significa que o loop atuar sobre todas as clulas da seleo. Caso o loop encontre uma clula contendo somente a palavra "OK", ele tornar essa palavra mais escura. (A aparncia do texto controlada pela propriedade Font e a propriedade Bold significa texto em negrito.)

Um loop dentro de um loop.

O Loop Do e o loop For EachNext so poderosos de maneiras simples. Agora vamos aumentar um pouco a complexidade introduzindo os loops aninhados. Os loops aninhados so utilizados quando necessrio executar uma ao em um intervalo de dados mais de uma vez, ou em mais de um intervalo de dados. Uma analogia com os loops aninhados seria a Terra girando em torno do sol. Uma revoluo completa em torno do sol, um ano, seria o loop externo, e uma rotao da Terra em torno do seu eixo, um dia, seria o loop aninhado dentro do loop externo. Para cada ano, existem 365 loops internos, e a cada 1 de janeiro o loop externo se repete:

claro que o cdigo acima no seria executado no Excel, mas ele ilustra o fato de que, para cada loop maior (em torno do sol) existem 365 loops menores (em torno do eixo da Terra). Ou ento considere um processo que realmente poderia ser executado no Excel. Suponha que voc queira remover as linhas duplicadas de uma planilha. Voc poderia comparar a primeira linha com todas as linhas subseqentes, localizar eventuais duplicaes e exclu-las. Em seguida, voc compararia a segunda linha com todas as linhas subseqentes, e assim por diante. O loop externo faria o processo se repetir a cada linha. O loop interno cuidaria da comparao e da excluso. Na prxima lio, voc ver exatamente como isso pode ser feito.

Colunas representadas como nmeros em vez de letras.

As macros de loop utilizam dois mtodos diferentes para importar os dados de uma clula para o seu cdigo. Um chamado de propriedade Cells e o outro de propriedade Range. No VBA, geralmente mais fcil e mais conveniente usar a propriedade Cells, porque mais fcil alterar os valores descritos por essa propriedade. A propriedade Rangeidentifica linhas e colunas usando os nmeros e as letras da planilha, ao passo que a propriedade Cells usa nmeros tanto para as linhas como para as colunas. Adicionar +1 a esses nmeros uma maneira conveniente de fazer uma macro de loop avanar linha a linha e coluna a coluna, mas no existe uma maneira conveniente de passar de uma letra para a prxima no cdigo. Dica Se preferir, voc pode ver os nmeros de colunas em vez de letras de colunas na sua planilha. No

menu Ferramentas, clique em Opes e selecione a guia Geral. Marque a caixa "Estilo de referncia L1C1". Se, mais adiante, voc quiser alterar novamente essa opo, desmarque a caixa de seleo.

Teste os exemplos de cdigo.

Voc j avanou bastante no aprendizado das macros de loop e das macros VBA em geral. Agora chegou o momento de testar esses conhecimentos executando algum cdigo real. Para facilitar as coisas, ns forneceremos a voc o cdigo para ser usado como ponto de partida. Para continuar a leitura desta lio sozinho, clique em Prxima.

Adote, adapte, melhore: localize um exemplo de cdigo e personalize-o.

At os melhores programadores gostam de comear com um exemplo, porque

Eles so preguiosos. mais fcil. Ns forneceremos voc trs exemplos diferentes de cdigo para executar aes nos dados do arquivo de prtica. Quando estiver familiarizado com esses exemplos, voc poder modific-los para trabalhar com os seus prprios dados.

Essa macro de Loop Do combina duas colunas em uma terceira.

Essa macro permitir combinar os valores de duas colunas em uma terceira coluna, com um espao entre elas. Nos dados de prtica, as colunas que sero combinadas so First Name, Last Name e Full Name, como mostra a ilustrao. Talvez voc esteja pensando, "Eu poderia fazer isso com uma frmula ser que a macro realmente necessria?" E estaria certo. Dentre as muitas coisas que podem ser feitas com frmulas no Excel, esse processo de fato seria um candidato ideal. Mas o exemplo tambm ilustra claramente o funcionamento do Loop Do e o que voc pode realizar com esse tipo de loop.

No exemplo, o nome e o sobrenome sero copiados para a coluna Full Name com um espao entre eles. A operao continuar a ser executada enquanto o valor de Cells(x,3) no for vazio. A varivel x utilizada para controlar o nmero da linha atual; quando x aumentado, a operao passa para a linha seguinte. As colunas so especificadas pelos valores no variveis 3, 4 e 5, que representam, respectivamente, as colunas C, D e E. Dica Quando estiver tentando entender essas macros VBA, leia atentamente os comentrios em texto

verde. Enquanto estiver trabalhando no Editor do Visual Basic, voc pode inserir mais comentrios digitando uma apstrofe no incio de uma nova linha. O VBA ignorar essa linha quando executar a macro.

Essa macro de Loop For EachNext l todas as clulas, colorindo-as de acordo com o contedo.

Essa macro define as cores do plano de fundo das clulas no intervalo selecionado. O plano de fundo ser vermelho se a clula contiver a palavra "book", verde se ela contiver a palavra "movie", azul se ela contiver qualquer outro valor e branco se a clula estiver vazia. O mesmo resultado poderia ser obtido usando o recurso de Formatao Condicional. O exemplo de cdigo, porm, mostra como usar um loop para operar com todas as clulas de um intervalo selecionado.

"MyCell" uma varivel que controla a clula em que o loop est atuando. Os asteriscos no exemplo permitem que o cdigo localize o texto especificado quando ele fizer parte de um bloco de texto maior. Como voc pode ver na ilustrao, o cdigo no busca somente o texto que comece com letra maiscula. Ele localiza tanto "Book" como "Read the book". Para obter esse comportamento, voc teria que especific-lo antes de inserir a macro. Bem no incio do mdulo, antes de digitar Sub ou colar qualquer cdigo, voc digitaria o seguinte cdigo:

Essa opo especifica que qualquer cdigo subseqente que utilize o operador Like atuar igualmente sobre texto em minsculas ou maisculas. Sem essa opo, o cdigo alteraria a cor do plano de fundo somente quando encontrasse o texto comeando com uma letra maiscula.

Essa macro de loop aninhado exclui linhas com valores duplicados em duas colunas.

Essa macro exclui linhas cujas colunas D e F contenham, ao mesmo tempo, valores duplicados. uma macro eficiente porque pode ser adaptada para atuar sobre valores duplicados em outras colunas dos seus dados. Observao Cuidado ao executar essa macro! Ela excluir dados da sua planilha. E, quando voc

executa uma macro, no h a opo Desfazer. O que est feito, est feito. Como medida de segurana, primeiro copie os seus dados e execute a macro na cpia para testar os resultados.

O loop interno localiza quaisquer linhas que dupliquem a linha inicial e as remove. O loop externo move a linha inicial para baixo na seleo, uma linha de cada vez, at que cada linha tenha sido comparada com todas as que estejam abaixo dela na seleo.

Você também pode gostar