0174-Dica VBA: Determinando a última célula com valores

Uma questão recorrente em códigos VBA é determinar qual a última linha de uma coluna, ou a última coluna de uma linha que contém valores.
Este é o ponto chave para determinar o ponto final de um loop ou as células que serão formatadas em um determinado intervalo, por exemplo.

A forma mais usual é determinando por deslocamento a partir da última célula.

A ideia por trás desta abordagem é buscar a última célula da coluna ou da linha e, a partir desta, deslocar o foco do Excel até a primeira célula na qual encontrar valores.

Para determinar a última célula da coluna A, por exemplo, podemos fazer:

Sub UltimaCelulaColunaA()
MsgBox Cells(Rows.Count,"A").Address
End Sub

O resultado é o endereço da célula $A$1048576 para aqueles que estiverem utilizando versões posteriores à 2007.
O argumento Rows.Count representa o total de linhas presente na coluna indicada.
A propriedade Cells aceita duas sintaxes em relação à coluna: Cells(Rows.Count,”A”) e Cells(Rows.Count,1).

Da forma análoga, determinaremos a última célula da linha 1

Sub UltimaCelulaLinha1()
MsgBox Cells(1, Columns.Count).Address
End Sub

O resultado é $XFD$1 para as versões posteriores à 2007.

Visto como podemos determinar as “células limite”, vejamos como é possível deslocar o foco para a primeira célula preenchida.

O objeto Range possui uma propriedade chamada End, através da qual é possível encontrar a última célula de uma região, a partir de uma célula inicial e informada a direção (Esquerda, Direita, Acima ou Abaixo) na qual será realizada a busca.

Segue a lista dos valores possíveis e as respectivas direções de pesquisa.

End(xlUp) Acima
End(xlDown) Abaixo
End(xlToLeft) À esquerda
End(xlToRight) À direita

Então se queremos saber a última célula que contém valores em uma linha, primeiro determinaremos qual é a última célula e, a partir dela, nos moveremos para cima até encontramos a primeira linha com valores.

Para descobrir qual a linha correspondente a esta célula, utilizamos a propriedade Row (linha em inglês).

Deste raciocínio, resulta a linha de comando que normalmente utilizamos para determinar a última linha preenchida (no exemplo utilizamos a coluna A):

UltLin = Cells(Rows.Count,"A").End(xlUp).Row

E para determinarmos o número da última coluna com valores na linha 1, temos:

UltCol = Cells(1,Columns.Count).End(xlToLeft).Column

Comentário:
Se estivermos interessados na última célula da planilha, aquela que compreende a intersecção da última linha com valores e a última coluna com valores, podemos utilizar o método SpecialCells:

Sub UltimaCelulaPlanilha()

Endereco = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Address

MsgBox Endereco

End Sub

O truque aqui é sempre atribuir a uma variável, pois se o intervalo tiver sido modificado recentemente podemos obter um valor falso, pois o Excel não atualiza o UsedRange automaticamente a cada alteração da planilha.

Outras utilizações de SpecialCells podem ser vistas no post: 0166-Dica VBA: Método SpecialCells

Anúncios

In Excel We Trust

Marcado com: , , , , , , ,
Publicado em Nível: Avançado

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

Visitas dos usuários
  • 2,077,129

Clique para assinar este blog e receber notificações de novos artigos por email.

Junte-se a 1.537 outros seguidores

Aumente sua interação

Siga-nos do twitter (@usuariosdoexcel).

Acesse o nosso fórum e compartilhe as suas dúvidas.

Curta nossa página no Facebook.

Junte-se ao grupo do LinkedIn.

Visite-nos utilizando o seu smartphone ou tablet.

Recomende este Blog
Visualizar notícias
Site monitorado:
Real Time Web Analytics

Clicky

%d blogueiros gostam disto: