domingo, 4 de setembro de 2011

7. ESTRUTURAS DE REPETIÇÃO


É isto aí pessoal! Mais uma parte do nosso curso. Vem muito mais pela frente. Logo, logo estarei compilando uma apostila com um conteúdo muito mais aprofundado.

7. ESTRUTURAS DE REPETIÇÃO

Considero as estruturas de repetição, os comandos mais importantes da programação VBA ou de qualquer linguagem, seja JAVA, PHP, C#, C++ dentre outras. Por esta razão, dispensaremos mais tempo ao seu estudo.

Também conhecidos como LOOP’S ou LAÇOS, esses códigos são usados para repetir as ações desejadas até que uma condição X seja satisfeita e tenha se cumprido o propósito definido pelo programador.

É importante salientar, que o programado deve desenvolver o algoritmo com cuidado para não criar um LOOP infinito, ou seja, um código cuja condição nunca poderá ser satisfeita. Durante nosso estudo sobre as estruturas de repetição, veremos a fundo essas inconsistências que podem ocorrer durante a execução de um programa.

Você verá, que os LOOP’S são de longe os comandos mais poderosas da programação VBA, já que podem ser disparados à partir de uma ação do usuário, tornado os programas fáceis de operar e extremamente autônomos.

Em resumo, vamos ver comandos que nos ajudarão a criar rotinas que minimizem ao máximo o tempo gasto com tarefas repetitivas. Entre as estruturas que estudaremos estão a FOR – NEXT, DO WHILE/UNTIL e seus desmembramentos e a poderosa FOR – EACH – NEXT.

Você deve estar se perguntando! Que tipo de repetição está se referindo? Fique tranqüilo, vamos fazer muitos exemplos e a compreensão ficará fácil. Você compreenderá, que programar um LOOP, nada mais é que um exercício de criatividade e profundo conhecimento de lógica algorítmica. Por ora, posso lhe dizer, por exemplo, que é possível numerar uma planilha uma planilha de 1 a 10.000 sem precisar fazer isto:




Em uma situação cotidiana, para numerar uma planilha de 1 a 10.000 no Excel, você precisaria digitar o número 1 na célula A1 e o 2 na célula A2, selecioná-las e sair puxando até , até, até, até e até!!! Ufa! Haja paciência. Quer uma solução para isto. Não se preocupe mais, seus problemas acabaram e a solução não é um produto Tabajara, é só programação VBA.  

Concluindo esta introdução, repiso a importância de se compreender, que os LOOP’S têm como principal objetivo, a repetição de determinado bloco de códigos de forma inteligente e automática.


7.1. Estrutura FOR – NEXT

Este comando é extremamente útil para construirmos algoritmos com um número finito de ações. Ou seja, quando sabemos previamente quantas vezes determinada linha ou bloco de códigos deve ser repetido. É claro  que com um pouco de criatividade, poderemos permitir que o usuário defina o número de vezes que a repetição se processará.

Para definir o número de repetições, precisaremos utilizar uma variável contadora, que armazenará o número de vezes que o código foi repetido. Obviamente, o contador variará de um valor inicial a um valor final. Não esquente sua cuca, mais tarde, os exemplos esclarecerão melhor este conceito.

Agora, veja a sintaxe geral desta estrutura

FOR contador = inicio TO fim INCREMENTO
Comando1
Comando2
...
Comandon
NEXT

O importante é entender que a variável contador, não armazenará o mesmo número o tempo todo. A cada execução do LAÇO, a variável será incrementada pelo valor definido em INCREMENTO. Vamos ao no primeiro exemplo.

1º EXEMPLO

Imagine que você queira criar um programa que faça uma soma, um determinado número de vezes. Os comentários estão no código.



CÓDIGO PARA COPIAR

Sub SomaNumero()

‘Como aprendemos no tópico 3.2, vamos declarar a variável que receberá um número que não se alterará durante a execução do LAÇO.
Dim Total as Integer
‘Agora, declaramos a variável Soma, que receberá o resultado do cálculo que proveniente da execução do LAÇO.
Dim Soma as Interger
‘A última variável que criaremos, receberá o números que se estenderão do valor inicial ao final.
Dim Numero as Interger

‘Neste momento, vamos atribuir um valor específico à variável Total. Repiso, este número será sempre 10
Total=10
‘Vamos inicializar a variável soma com o valor 0. E por que? Se queremos que ela absorva o valor o do calculo que faremos, ela não poderá ser inicializada com valor maior que 0, pois o mesmo seria somado, assim, nossa variável será incrementada à partir do primeiro LOOP. (Perceba que às vezes digo LAÇO e outras LOOP. Na Como já disse, é mesma coisa.)
Soma=0
‘Agora, faremos a soma dos 10 primeiros números. Entenda o código:
‘Para o número de 1 a 10, ou seja, quando o primeiro LOOP for excecutado, a variável Numero terá dentro de sí o valor 1. O cálculo será feito e comando Next dirá, vamos para a próxima fase. Quando o segundo LOOP rodar, a variável Numero terá dentro de si o valor 2 e assim sucessivamente até o número 10. Como determinamos que o LAÇO será executado 10 vezes(For Numero=1 to Total “Entender isto é extremamente importante.), o comando Next finalizará o LAÇO, já que o próximo seria 11, porém, determinamos previamente que nosso LOOP sofreria apenas 10 execuções. Simples não?

‘ Então, Para(FOR) um número que será executado até 10....
For Numero=1 to Total
‘Efetuaremos o cálculo abaixo. No primeiro LOOP teremos: Soma = 0 + 1, então a variável Soma será igual a 1. Concorda? No segundo LOOP, a variável Soma já valerá 1, teremos: Soma(que é 1) = 1( que é o valor de Soma) +1. Se o LAÇO fosse finalizado neste momento, a variável Soma, terminaria com o valor 2. Entendeu o processo? Ou foi muito bruto? Se o processo foi bruto, sugiro que você retome o raciocínio do começo. Tenho certeza que na segunda ou terceira revisão, os conceitos ficarão claros.  
Soma = Soma + Numero
‘Próximo número
Next
‘Exibimos a mensagem com o valor total da soma. E por que o “& Soma”? Quando o LOOP for finalizado a variável Soma estará com o resultado final dos cálculos, então é só fazer uma chamada a ela. Moleza meu Brother!!!
MsgBox “Valor da Soma = “ & Soma
‘Finalizamos o procedimento
End Sub


É isto ai! Click em F5 e execute o programa. O resultado será este:


Por que??? Vamos tirar a prova?

Veja bem, a primeira vez que o LOOP rodar, a variável NUMERO valerá 1 e a SOMA valerá 0, conformo declaramos no início do código. No final do primeiro LOOP, a variável SOMA valerá 1 e a NUMERO valerá 2 e assim por diante. Quando o LAÇO for executado pela décima vez, a variável NUMERO será 10 e valor inicial da SOMA será 45. Somando-se, teremos 55. Molezinha!!! Observe a tabela abaixo e veja como é simples.





2º EXEMPLO

Como lhe disse no começo deste capítulo, há uma maneira mais fácil de inserir números em uma planilha, que não selecionar os dois primeiros e puxar com mouse. Então vamos lá.

No módulo crie esta sub-rotina




CÓDIGO PARA COPIAR

Sub NumeraPlanilha()

'Primeiro, declaramos a variável Planilha. E por que? Porque sim!!! Brincadeira, só pra descontrair. Na realidade,
'se vamos inserir números em uma planilha, precisamos especificar qual vai ser. Neste caso escolhi a Plan2.
Dim Planilha As Worksheet
'Para inserir os números um abaixo do outro, precisamos identificar as linhas. Assim, quando o LOOP rodar, o FOR-NEXT,
'saberá qual e em qual linha o número deverá ser inserido
Dim Linha As Integer

'Determinamos aqui, qual planilha receberá a numeração automática.
Set Planilha = Worksheets("plan2")

'O bloco WITH-END WITH é um facilitador para o nosso código. Quando colocamos With Planilha, estamos querendo dizer,
'que tudo o que está dentro do código, relaciona-se à plan2, que no nosso exemplo, demos o nome de Planilha
'(Dim Planilha As Worksheet) lembra?
With Planilha
'Para a variável linha, que receberá os números de 1 a 15(em momentos distintos é claro), vamos de um a um (Step 1), inserir
'os números.
For Linha = 1 To 15 Step 1
'Quando você digitar o ponto, automáticamente, os objetos, propriedades da Planilha(Plan2) serão acessados. E por que?
'porque você está digitando dentro do bloco WITH-END WITH que criamos para a Planilha. Como você está vendo, acessamos
'Cells(celulas) que obviamente tem linhas e colunas. No nosso exemplo, a linha será a que o FOR-NEXT determinar no
'momento do LOOP e a coluna será sempre 1. Quando o LAÇO rodar a primeira vez, a variável linha será 1. Então teremos:

'      linha, coluna            1
'Cells(  1   ,  1   ).Value = Linha. Interpretando: Na celula 1 da coluna 1, o  valor será igual ao da variável linha,
'que neste caso sera 1.

'Quando o LOOP rodar pela segunda vez, você já sabe o que vai acontecer.
.Cells(Linha, 1).Value = Linha
'Fechamos nosso LOOP
Next
'Fechamos nosso bloco WITH-END WITH.
End With
'Agora é só colocar pra rodar.
End Sub


7.1.1. Discernindo o tal STEP.

Talvez você não tenha entendido muito bem o significado deste negócio no código(Step). É simples, ele determina qual será o andamento do LAÇO, ou seja, de um em um, dois em dois e assim por diante. Para exemplificar, vá no código que acabamos de criar e mude Step1 para Step 2 e execute. Acontecerá isto:




A imagem mostra tudo. O LAÇO continuará numerando de 1 a 15, porém, saltando uma linha. Simples!!!

Te vejo no próximo LOOP.



Para acessar o curso completo Clique aqui

Nenhum comentário: