A partir do hoje veremos em detalhes as ferramentas e o “jeitão” da programação em VBA. Imagine, como um exemplo simples, que você precisa obter a média aritmética das quatro primeiras linhas da coluna A da planilha, e escrever este resultado na célula A5. Uma forma comum de fazer somas em VBA é ir “acumulando” os valores numa variável. Faremos isso hoje com a variável “Soma”. Lembre-se que os textos de explicação ficam precedidos de apóstrofe ( ‘ ), e ficam em verde. Veja uma forma simples (mas pouco inteligente) de se fazer:
Sub MediaColunaA()
Dim soma As Double
Dim media As Double
Dim valor As Double
soma = 0
‘fazemos isso para garantir que a variável começa zerada
valor = Cells(1, 1)
soma = soma + valor
valor = Cells(2, 1)
‘agora a variável “valor” foi substituída
soma = soma + valor
‘agora a variável soma recebeu um acréscimo, foi acumulada
valor = Cells(3, 1)
soma = soma + valor
valor = Cells(4, 1)
soma = soma + valor
media = soma / 4
Cells(5, 1) = media
End Sub
Faça o teste. Se tudo deu certo, a célula A5 vai apresentar o média. Se houve algum erro, você pode verificar a execução da Sub passo a passo com a tecla F8.
Mas esta não é a melhor forma de fazer isso. O VBA existe para trabalharmos com coisas complexas, como listagens grandes, como de 1.000 ou 10.000 entradas. Seria inviável continuarmos com esse raciocínio. Para resolver este tipo de problema existe o comando Do While (“faça enquanto…”).
O Do While testa uma condição. Se esta condição for verdadeira, ele lê a linha de baixo e continua até encontrar o comando Loop. Neste ponto ele volta para o Do While e testa a condição novamente. Fará isto até que a condição seja falsa, quando ele passará à linha abaixo do Loop. Veja a seguinte estrutura geral:
Do While <condição>
Comando 1
Comando 2
Comando N
Loop
Comando N+1
O programa inicia testando a condição. Se for verdadeira, executará os Comandos 1, 2 e N e volta ao teste de condição em Do While. Fará isto até que a condição seja falsa, quando executará o Comando N+1.
É possível colocar um comando Do While dentro de outro. Para não se perder, lembre-se de marcar visualmente isto, deslocando os internos para a direita:
Do While <condição>
Comando 1
Do While <condição 2>
Comando Y
Loop
Comando 2
Comando N
Loop
Comando N+1
Vejamos uma solução elegante para o mesmo problema de cima, da média da coluna A:
Sub MediaColunaADoWhile()
Dim linha As Integer
Dim soma As Double
Dim valor As Double
soma = 0
valor = 0
linha = 1
‘este último é importante, porque não existe linha = 0
Do While linha <= 4
valor = Cells(linha, 1)
soma = soma + valor
linha = linha + 1
Loop
media = soma / (linha – 1)
Cells(linha, 1) = media
End Sub
Até a próxima!
3 comentários em “VBA™ para Excel™ 4: Do While”