Ú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+setaa 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).Rowdevolve 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.Selectconfirma o acerto. - 5:30 - O
With ... End Withdeixa 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:=xlFormulasfaz procurar também onde há fórmula, e a correspondência é parcial, não exata. - 10:00 -
SearchOrder:=xlByRowsvarre linha a linha; para a coluna, troque porxlByColumns. - 10:30 - A chave é
SearchDirection:=xlPrevious: comxlNextele 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!
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á.

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:

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.
<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
<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!
- Ambiente do VBA
- Códigos em VBA
- Declaração de variáveis em VBA
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!

