Dentro da parceria que o Pplware teve o prazer de encetar com a revista PROGRAMAR eis mais um novo artigo repleto de dicas úteis e simples de VBA, para Excel.
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:
Dim x As Integer
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:
Dim lastRow As Long
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, mesmo na versão do Excel 2003, ao total de linhas disponível na folha de calculo.
Depois, é só utilizar a variável para limitar o ciclo:
Dim lastRow As Long
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:
Dim lastColum As Integer
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 lastCellRow As Long
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 princípio, 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 lastRow As Long
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.