Os ciclos nas folhas de cálculo são bastante comuns quando se usa VBA. O objectivo é percorrer uma lista de valores e executar determinada acção ou validação enquanto este percorre todas as linhas ou colunas.
A execução de um ciclo simples pode ser feito da seguinte forma:
For x = 1 To 100
Cells(x, "A").Value = x
Next
Isto irá escrever em todas as células da coluna A, da linha 1 à linha 100, um número sequencial. Mas este é um exemplo simples onde definimos onde começa e onde termina.
Para se fazer um ciclo numa lista de dados já existente, devemos sempre saber onde começar e onde terminar. Não tem lógica percorrer todas as linhas de uma folha de cálculo se estão apenas a ser utilizadas 20 ou 30.
Para se determinar a última linha usada em uma lista, devemos utilizar o seguinte método:
lastRow = Cells(Cells.Rows.Count, "A").End(xlUp).Row
Isto é semelhante a seleccionar a ultima linha da coluna A e pressionar as teclas CTRL + UP ARROW, que fará saltar a selecção para a primeira célula com dados.
Só assim podemos saber com exactidão, qual a última linha utilizada, pois mesmo que existam linhas em branco na lista, todas as linhas serão percorridas.
No entanto, algumas considerações:
- Caso existam várias colunas na lista, devemos definir a coluna que tem mais dados;
- A variável utilizada para a última linha deverá ser do tipo Long e não Integer, pois uma variável do tipo Integer suporta apenas números até 32,768, sendo este inferior ao total de linhas disponível na folha de calculo.
Depois, é só utilizar a variável para limitar o ciclo:
Dim x As Integer
lastRow = Cells(Cells.Rows.Count, "A").End(xlUp).Row
For x = 1 To lastRow
Debug.Print(Cells(x, "A").Value)
Next
Isto irá listar o valor de todas as células na coluna A. Para verificar qual a última coluna utilizada, o método é semelhante:
lastColum = Cells(1, Cells.Columns.Count).End(xlToLeft).Column
Mas existem outros métodos de verificar a última linha ou coluna utilizada, usando, por exemplo, o método SpecialCells:
Dim lastCellColumn As Long
' Informação da ultima linha
lastCellRow = ActiveSheet.Cells.SpecialCells(xlLastCell).Row
' Informação da ultima coluna
lastCellColumn = ActiveSheet.Cells.SpecialCells(xlLastCell).Column
No entanto, existem vários registos de que este método não é fiável, e basta apagar algumas linhas para verificar que não o é, e por isso não é recomendado.
Existe ainda uma especial atenção para ciclos onde são eliminadas linhas ou colunas, onde o ciclo deverá ser efectuado do fim para o principio, ou seja, da última linha/colunas para a primeira. Deste modo, um ciclo para eliminar linhas, por exemplo, deverá ser feito da seguinte forma:
Dim x As Integer
lastRow = Cells(Cells.Rows.Count, "A").End(xlUp).Row
' Ciclo que irá percorrer da última para a primeira linha
For x = lastRow To 1 Step -1
' Caso a célula esteja vazia
If Len(Cells(x, "A").Value) = 0 Then
Rows(x).Delete()
End If
Next
Estes são alguns exemplos simples de como fazer ciclos em células e como verificar qual a última linha ou coluna utilizada.
5 comentários:
Tudo o que eu precisava fazer para a minha aplicaçao eu encontrei aqui, excelente para pessoas que tem um pouco de noçao de programaçao e não quer ver dicas para debutantes.
Muito Obrigado, fiz o que eu deveria em 20 minutos com esse pequeno tutorial.
Merci de la France.
Obrigado pelo comentário Pedro Ruiz!
Olá bom dia,
Uma nota prévia: As suas dicas têm ajudado bastante e pouparam-me IMENSO tempo!
Agora, ao ler este artigo enquanto procurava uma solução para um problema que tenho pensei que poderia ser uma resposta para o tal problema que tenho.
Passo então a explicar:
O meu problema é o seguinte. Tenho uma fórmula em que verifico se a data C está entre as datas A e B, no entanto, se uma das primeiras linhas não está dentro do intervalo que eu defini, a fórmula SE dar-me-á um resultado falso.
Ora o que eu pretendo é que se o resultado for falso, a fórmula continue a procurar a partir da linha seguinte.
Isto é possível resolver com um loop? Ou terá de ser de outra forma... Consegue ajudar-me?
Muito obrigada!
Melhores cumprimentos,
Vera Lúcia.
Olá Vera,
Pode colocar essa questão com mais detalhe aqui: http://www.portugal-a-programar.pt/forum/128-visual-basic-for-applications-vba/ ?
Pessoal...Tenho uma variável (um nome) declarada no VBA como faço para resgatar este nome para colocar em uma célula na planilha (se possível através de uma fórmula) Obrigado
Enviar um comentário