NOTA : Pretendo fazer deste um "posto único" onde você possa usar o Correctcaminho para encontrar a última linha. Isso também abordará as práticas recomendadas a serem seguidas ao encontrar a última linha. E, portanto, continuarei atualizando sempre que encontrar um novo cenário / informação.
Maneiras não confiáveis de encontrar a última linha
Algumas das maneiras mais comuns de encontrar a última linha que não são confiáveis e, portanto, nunca devem ser usadas.
- UsedRange
- xlDown
- CountA
UsedRangeNUNCA deve ser usado para encontrar a última célula que possui dados. É altamente não confiável. Tente este experimento.
Digite algo na célula A5. Agora, quando você calcula a última linha com qualquer um dos métodos fornecidos abaixo, ele fornecerá 5. Agora, pinte a célula de A10vermelho. Se você agora usa qualquer um dos códigos abaixo, ainda receberá 5. Se você usar Usedrange.Rows.Counto que recebe? Não será 5.
Aqui está um cenário para mostrar como UsedRangefunciona.

xlDown é igualmente não confiável.
Considere este código
lastrow = Range("A1").End(xlDown).Row
O que aconteceria se houvesse apenas uma célula ( A1) com dados? Você chegará à última linha da planilha! É como selecionar uma célula A1e pressionar a Endtecla e pressionar a Down Arrowtecla. Isso também fornecerá resultados não confiáveis se houver células em branco em um intervalo.
CountA também não é confiável porque fornecerá resultados incorretos se houver células em branco no meio.
E, portanto, deve-se evitar o uso de UsedRange, xlDowne CountApara encontrar a última célula.
Localizar última linha em uma coluna
Para encontrar a última linha na Col E, use este
With Sheets("Sheet1")
LastRow = .Range("E" & .Rows.Count).End(xlUp).Row
End With
Se você perceber que temos um .antes Rows.Count. Muitas vezes escolhemos ignorar isso. Veja ESTA pergunta sobre o possível erro que você pode receber. Eu sempre aconselho usar .antes Rows.Counte Columns.Count. Essa pergunta é um cenário clássico em que o código falhará porque Rows.Countretorna 65536para o Excel 2003 e versões anteriores e 1048576para o Excel 2007 e versões posteriores. Da mesma forma Columns.Countretorna 256e 16384, respectivamente.
O fato acima que o Excel 2007+ possui 1048576linhas também enfatiza o fato de que sempre devemos declarar a variável que manterá o valor da linha, pois, em Longvez disso Integer, você receberá um Overflowerro.
Observe que essa abordagem ignorará todas as linhas ocultas. Olhando para a minha captura de tela acima da coluna A , se a linha 8 estivesse oculta, essa abordagem retornaria em 5vez de 8.
Localizar última linha em uma planilha
Para encontrar a Effectiveúltima linha na planilha, use isto. Observe o uso de Application.WorksheetFunction.CountA(.Cells). Isso é necessário porque, se não houver células com dados na planilha, .Findvocê forneceráRun Time Error 91: Object Variable or With block variable not set
With Sheets("Sheet1")
If Application.WorksheetFunction.CountA(.Cells) <> 0 Then
lastrow = .Cells.Find(What:="*", _
After:=.Range("A1"), _
Lookat:=xlPart, _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious, _
MatchCase:=False).Row
Else
lastrow = 1
End If
End With
Localizar última linha em uma tabela (ListObject)
Os mesmos princípios se aplicam, por exemplo, para obter a última linha na terceira coluna de uma tabela:
Sub FindLastRowInExcelTableColAandB()
Dim lastRow As Long
Dim ws As Worksheet, tbl as ListObject
Set ws = Sheets("Sheet1") 'Modify as needed
'Assuming the name of the table is "Table1", modify as needed
Set tbl = ws.ListObjects("Table1")
With tbl.ListColumns(3).Range
lastrow = .Find(What:="*", _
After:=.Cells(1), _
Lookat:=xlPart, _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious, _
MatchCase:=False).Row
End With
End Sub