Estrutura Do … Loop (While, Until e Wend) – VBA

Oi pessoal!

Conforme prometido no post anterior, vamos falar da estrutura Do…Loop!

Utilizamos essa estrutura para repetir um trecho de código enquanto uma determinada condição for verdadeira, ou até que uma determinada condição torne-se verdadeira. Podemos usar dois operadores condicionais diferentes, que podem aparecer no início ou no final do trecho de código, são eles: While e Until. Com isso, temos quatro formas distintas de escrever o código, conforme veremos nos exemplos a seguir.

Essa estrutura nos permite, por exemplo, criar um código determinando que o VBA percorra as células de uma coluna, preenchendo uma fórmula em todas as células até encontrar a primeira célula vazia (“”) ou até encontrar um determinado valor.

Nos exemplos a seguir, observe que o código dentro da estrutura será executado enquanto a condição (Contador <= x) for verdadeira. Quando a condição for falsa, o primeiro comando após o laço será executado (MsgBox “Soma = ” & Soma).

Importante: o código dentro da estrutura deve ser capaz de alterar a condição de verdadeira para falsa. Caso contrário, sendo a condição sempre verdadeira, os comandos dentro da estrutura serão executados infinitamente ou até o programa travar!

Agora, vamos aos exemplos das quatro formas de escrever o código dessa estrutura! Reparem que em todas obtemos o mesmo resultado.

 

Exemplo de código com While no início do trecho de código:

Sub Do_Loop_While_no_início()

Dim x, Contador, Soma

x = 10

Contador = 1

Soma = 0

‘ Efetua a soma dos dez primeiros números maiores que zero.

Do While Contador < x

Soma = Soma + Contador

Contador = Contador + 1

Loop

MsgBox “Soma = ” & Soma

End Sub

Exemplo de código com While no final do trecho de código:

Sub Do_Loop_While_no_final()

Dim x, Contador, Soma

x = 10

Contador = 1

Soma = 0

‘ Efetua a soma dos dez primeiros números maiores que zero.

Do

Soma = Soma + Contador

Contador = Contador + 1

Loop While Contador < x

MsgBox “Soma = ” & Soma

End Sub

Nos exemplos a seguir, observe que o código dentro da estrutura será executado enquanto a condição (Contador > x) for falsa. Quando a condição for verdadeira, o primeiro comando após o laço será executado (MsgBox “Soma = ” & Soma).

Importante: o código dentro da estrutura deve ser capaz de alterar a condição de falsa para verdadeira. Caso contrário, sendo a condição sempre verdadeira, os comandos dentro da estrutura serão executados infinitamente ou até o programa travar!

Exemplo de código com Until no início do trecho de código:

Sub Do_Loop_Until_no_início()

Dim x, Contador, Soma

x = 10

Contador = 1

Soma = 0

‘ Efetua a soma dos dez primeiros números maiores que zero.

Do Until Contador >= x

Soma = Soma + Contador

Contador = Contador + 1

Loop

MsgBox “Soma = ” & Soma

End Sub

 

Exemplo de código com Until no final do trecho de código:

Sub Do_Loop_Until_no_final()

Dim x, Contador, Soma

x = 10

Contador = 1

Soma = 0

‘ Efetua a soma dos dez primeiros números maiores que zero.

Do

Soma = Soma + Contador

Contador = Contador + 1

Loop Until Contador >= x

MsgBox “Soma = ” & Soma

End Sub

Essa é uma das estruturas que mais uso no desenvolvimento de relatórios de acompanhamento de resultados em Controladoria e Finanças. Mas na prática, acabo usando o laço While … Wend, que é equivalente ao primeiro exemplo acima!

Tentem, por exemplo, executar o código abaixo. Com certeza vocês visualizarão um caixa de mensagem com a soma dos dez primeiros números maiores que zero, que é igual a 45!

 

 

Sub While_Wend()

Dim x, Contador, Soma

x = 10

Contador = 1

Soma = 0

‘ Efetua a soma dos dez primeiros números maiores que zero.

While Contador < x

Soma = Soma + Contador

Contador = Contador + 1

Wend

MsgBox “Soma = ” & Soma

End Sub

Abs Dr. E

P.S. Gostaria de pedir desculpas, mas infelizmente não estou conseguindo responder todos os e-mails com dúvidas que venho recebendo. Por isso, peço que não usem o espaço de comentários do post para enviar dúvidas.

As Estruturas Select Case e For … Next … Step – VBA

Oi Pessoal!

Dando continuidade ao aprendizado de VBA, vou falar de mais duas estruturas: Select Case e For…Next.

Vamos começar pela Select Case…

Aqui, quando um dos testes lógicos for verdadeiro, os comandos relacionados serão executados e os demais testes nem serão avaliados, seguindo a execução do código para o primeiro comando após o End Select (última linha de código desta estrutura).

Importante: quem leu o post anterior vai concluir que para realização de uma série de testes, esta estrutura é mais eficiente e de leitura mais simples que a estrutura If…Then, que avalia todos os testes da série.

Exemplo de código:

 

Sub Estrutura_Select_Case()

‘ Declaração de variáveis.

Dim x

x = 6

‘Teste lógico.

Select Case x

Case 1

MsgBox “O valor de x é 1!”

Case 2

MsgBox “O valor de x é 2!”

Case 3

MsgBox “O valor de x é 3!”

Case 4

MsgBox “O valor de x é 4!”

Case 5

MsgBox “O valor de x é 5!”

Case Else

MsgBox “x não é um número inteiro menor que 5!”

End Select

End Sub

Falando agora da For…Next

Utilizamos essa estrutura para repetir um trecho de código por um determinado número de vezes.

Geralmente usamos uma variável, que de acordo com a lógica estabelecida no código, servirá de contador, variando de um valor inicial definido até um valor final.

Podemos, por exemplo, pedir ao VBA que percorra as células de uma determinada coluna no Excel para informar a posição (número da linha) ou o valor do último registro desta coluna.

Exemplo de código:

 

Sub For_Next()

Dim x, Soma

x = 10

Soma = 0

‘ Efetua a soma dos dez primeiros números maiores do que zero.

For i = 1 To x

Soma = Soma + i

Next

MsgBox “Soma = ” & Soma

End Sub

 

Quando executarmos o código acima, o Excel exibirá uma Caixa de Mensagem com o resultado Soma = 55

A estrutura For…Next…Step

 

Agora, acrescentaremos o comando Step à estrutura para informar ao VBA quais números dentro do intervalo deverão ser considerados na operação. No exemplo abaixo, com Step 2, o VBA somará 2 ao último valor encontrado da variável i, até que a mesma alcance seu valor máximo.

 

Sub For_Next_Step()

Dim x, Soma

x = 10

Soma = 0

‘ Efetua a soma dos primeiros números ímpares menores do que dez.

For i = 1 To x Step 2

Soma = Soma + i

Next

MsgBox “Soma = ” & Soma

End Sub

Quando executarmos o código acima, o Excel exibirá uma Caixa de Mensagem com o resultado Soma = 25

No próximo post sobre VBA, pretendo falar da estrutura Do…Loop, que usamos para repetir um trecho de código enquanto uma determinada condição for verdadeira, ou até que uma determinada condição torne-se verdadeira!

Abs, Dr. E

P.S. Gostaria de pedir desculpas, mas infelizmente não estou conseguindo responder todos os e-mails com dúvidas que venho recebendo. Por isso, peço que não usem o espaço de comentários do post para enviar dúvidas.