Última Linha ou Coluna Preenchida no VBA

Quer saber como pegar a última linha ou coluna preenchida no VBA do jeito certo? Então vem comigo que você vai aprender!

No VBA, a forma mais segura de achar a última linha preenchida é com o Find: ultLinha = aba.Cells.Find(“*”, , xlFormulas, xlPart, xlByRows, xlPrevious).Row. Para a última coluna, troque por xlByColumns e use .Column. A alternativa clássica, Cells(1048576, 1).End(xlUp).Row, enxerga apenas uma coluna.

Caso prefira esse conteúdo no formato de vídeo-aula, assista ao vídeo abaixo!

O que você aprende neste vídeo

Resposta rápida: São dois métodos. O simples usa Cells(Rows.Count, 1).End(xlUp).Row, sobe a partir da última linha da planilha até achar conteúdo, e só serve para tabela sem buracos. O robusto usa Cells.Find("*", , , , xlByRows, xlPrevious).Row, que varre a planilha inteira de trás para frente e acha a última linha preenchida mesmo com coluna vazia ou linha solta no meio.

Neste vídeo (14 min):

  • 1:00 - A lógica vem da planilha: Ctrl+seta a partir da última célula da coluna sobe direto até o último dado.
  • 1:30 - O Excel tem 1.048.576 linhas e 16.384 colunas, são esses os pontos de partida do método.
  • 3:00 - No VBA: abaTabela.Cells(1048576, 1).End(xlUp).Row devolve o número da última linha.
  • 4:00 - Para a coluna, o espelho: primeira linha, última coluna, e .End(xlToLeft).Column.
  • 5:00 - Com os dois números, Range(Cells(1,1), Cells(ultLinha, ultColuna)) monta o intervalo e o .Select confirma o acerto.
  • 5:30 - O With ... End With deixa o código legível: dentro dele, todo ponto sem objeto se refere àquela aba.
  • 6:00 - Vantagem prática do With: trocar de aba vira uma linha, em vez de editar cada referência.
  • 7:00 - O limite aparece na tabela irregular: com linha de total e coluna vazia, o método pega a linha 9 em vez da 10.
  • 8:30 - O método robusto é o Cells.Find: "*" é o coringa que significa “qualquer conteúdo”.
  • 9:30 - LookIn:=xlFormulas faz procurar também onde há fórmula, e a correspondência é parcial, não exata.
  • 10:00 - SearchOrder:=xlByRows varre linha a linha; para a coluna, troque por xlByColumns.
  • 10:30 - A chave é SearchDirection:=xlPrevious: com xlNext ele para no primeiro dado, lá em cima.
  • 13:00 - Com Find, o intervalo sai completo mesmo na tabela irregular, é o método a usar quando a base não é previsível.

Para receber por e-mail o(s) arquivo(s) utilizados na aula, preencha:

Fala Impressionadores! Na aula de hoje eu quero te mostrar duas formas de como pegar última linha preenchida do VBA e como pegar última coluna preenchida do VBA.

Esse é um recurso muito útil principalmente quando você vai criar automações dentro do VBA, pois se for adicionar novas informações você vai querer adicionar logo após a última linha/coluna preenchida.

Dessa forma não vai sobrepor informações, então é importante que saiba qual é a última linha/coluna preenchida para que possa colocar suas informações na próxima linha/coluna.

E aí, quer aprender como descobrir a última linha/coluna preenchida para facilitar suas automações dentro do Excel? Então vem comigo que eu te mostro!

Ícone VBAVBA Impressionador

Como automatizar praticamente qualquer tarefa repetitiva que você faça dentro do Excel. Aprenda a criar integrações do Excel com o PowerPoint, Word, Outlook e muito mais. Aprenda a criar automações para resolver tudo com apenas um clique em um botão. Tudo isso com uma única linguagem que junta todos esses programas.

Começar agoraSeta para a direita
Fundo VBATelas VBA

Como Inserir um Módulo no VBA

Para criar um código dentro do VBA geralmente criamos um módulo. Para criá-lo precisamos primeiramente abrir o ambiente de VBA, a partir do atalho do teclado Alt(+Fn)+F11.

Vamos na guia Inserir > Módulo, e uma caixa branca se abrirá.

Última Linha ou Coluna Preenchida

Por padrão ele terá o nome de “Módulo 1”. Colocaremos as duas “subs” abaixo dentro desse módulo.

A seguir apresentaremos os códigos e os comentários a respeito deles. Acompanhe com a gente.

Precisaremos também fazer uma adaptação, que é bem legal no VBA, que é renomear uma planilha. Podemos, por padrão, chamar a planilha pelo nome no VBA, como por exemplo Sheets(“Planilha1”)

Mas há uma outra forma de chamá-la, para referenciá-la dentro do código. Podemos simplesmente alterar sua propriedade Name. Veja:

Última Linha ou Coluna Preenchida

No exemplo, alteramos o nome da planilha para “abaTabelaAjustada”. Agora, para chamar ou referenciar essa planilha no código, podemos simplesmente escrever “abaTabelaAjustada”, como veremos a seguir.

VBA
<strong>Sub ultimaLinhaPreenhida()</strong>

<strong>Dim ultLinha As Long, ultCol As Long</strong>

<strong>Dim intervalo As Range</strong>

<strong>ultLinha = abaTabelaAjustada.Cells(1048576, 1).End(xlUp).Row</strong>

<strong>ultCol = abaTabelaAjustada.Cells(1, 16384).End(xlToLeft).Column</strong>

<strong>With abaTabelaAjustada</strong>

<strong>    Set intervalo = .Range(.Cells(1, 1), .Cells(ultLinha, ultCol))</strong>

<strong>End With</strong>

<strong>intervalo.Select</strong>

<strong>End Sub</strong>

Explicação do código acima (ultimaLinhaPreenchida):

Dimensionar:

A variável “ultLin” como uma variável do tipo Long (número)

A variável “ultCol” como uma variável do tipo Long (número)

A variável “intervalo” como uma variável do tipo Range (intervalo de células, ou célula)

Armazenar na variável “ultLin” o número da linha que vai ser gerado ao irmos para cima, a partir da célula de linha 1.048.576, na coluna 1 (A)

Armazenar na variável “ultCol” o número da coluna que vai ser gerado ao irmos a esquerda, a partir da célula de linha 1, na coluna 16.384 (XFD)

Configurar a variável “intervalo” para receber o intervalo de células compreendido entre a célula A1 (dada pela célula de coordenada linha 1 e coluna 1) e a célula dada pelas coordenadas que são representadas pela linha “ultLin” e a coluna “ultCol”, da aba “abaTabelaAjustada”

Selecionar o intervalo representado pela variável “intervalo”

Terminar o código

VBA
<strong>Sub ultimaLinhaPreenhidaCerto()</strong>

<strong>Dim ultLinha As Long, ultCol As Long</strong>

<strong>Dim intervalo As Range</strong>

<strong>ultLinha = abaTabelaAjustada.Cells.Find("*", , xlFormulas, xlPart, xlByRows, xlPrevious).Row</strong>

<strong>ultCol = abaTabelaAjustada.Cells.Find("*", , xlFormulas, xlPart, xlByColumns, xlPrevious).Column</strong>

<strong>With abaTabelaAjustada</strong>

<strong>    Set intervalo = .Range(.Cells(1, ultCol), .Cells(ultLinha, ultCol))</strong>

<strong>End With</strong>

<strong>intervalo.Select</strong>

<strong>End Sub</strong>

Explicação do código acima (ultimaLinhaPreenchidaCerto):

Armazenar na variável “ultLin” o número da linha, que vai ser gerado ao procurarmos “*”, olhando para as fórmulas, em parte da planilha (apenas naquela aba), olhando linha por linha

Armazenar na variável “ultCol” o número da coluna, ao procurarmos “*”, olhando para as fórmulas, em parte da planilha (apenas naquela aba), olhando coluna por coluna

Configurar a variável “intervalo” para receber o intervalo de células compreendido entre a célula A1 (dada pela célula de coordenada linha 1 e coluna 1) e a célula dada pelas coordenadas que são representadas pela linha “ultLin” e a coluna “ultCol”, da aba “abaTabelaAjustada”

Selecionar o intervalo representado pela variável “intervalo”

Terminar o código

Perguntas frequentes

1. Qual a diferença entre End(xlUp) e Find no VBA?

O End(xlUp) parte da última linha da planilha e sobe até encontrar conteúdo, mas só enxerga a coluna informada: se essa coluna tiver células vazias no fim, o resultado engana. O Find varre a aba inteira e devolve a última célula preenchida, independentemente da coluna.

2. Como pegar a última coluna preenchida no VBA?

Pela via clássica, use Cells(1, 16384).End(xlToLeft).Column, que caminha da última coluna da planilha para a esquerda. Pela via mais segura, use o Find com xlByColumns e xlPrevious, terminando em .Column. O número devolvido é a posição da coluna, não a letra dela.

3. Como criar um módulo no VBA para rodar esses códigos?

Abra o ambiente do VBA com o atalho Alt (+Fn) + F11, vá em Inserir > Módulo e uma folha em branco aparece, com o nome Módulo1. É dentro dela que você cola as suas sub-rotinas. Para executar, deixe o cursor dentro do código e pressione F5.

4. Como referenciar uma planilha pelo nome de código no VBA?

Além de chamar a aba por Sheets(“Planilha1”), você pode alterar a propriedade Name na janela de propriedades do VBA e usar esse nome direto no código, como abaTabelaAjustada. A vantagem é que o código continua funcionando mesmo se alguém renomear a guia na planilha.

Conclusão – Última Linha ou Coluna Preenchida no VBA

Nessa aula eu te mostrei os temas abaixo e te mostrei como você pode encontrar a última linha ou coluna preenchida no VBA.

Esse é um recurso muito útil dentro do VBA, pois nem sempre as informações que temos possuem um tamanho fixo, então descobrir qual é a última linha ou coluna de forma automática facilita bastante!

Até a próxima, Impressionadores! Fique ligado no nosso canal do Youtube para mais conteúdo de VBA!

Hashtag Treinamentos

Para acessar outras publicações de VBA, clique aqui!


Quer aprender mais sobre VBA com um minicurso básico gratuito?