Encontrar la última celda en una hoja de Excel

viernes, mayo 31, 2013

Una de las tareas frecuentes al escribir código Vba, muchas veces al modificar código de una macro grabada, es tener que determinar la última fila (o celda o columna) usada en la hoja.
Si nos basamos en una macro que hemos grabado al usar el método Ir-Especial-Última celda,



veremos esta sentencia

Range("A1").SpecialCells(xlCellTypeLastCell).Select

El problema con este método es que Excel recalcula la ubicación de la última celda usada sólo cuando guardamos el archivo. Esto significa que si ingresamos un valor en una celda remota y luego lo borramos, Excel seguirá considerando esa celda como la última. Y como si esto no fuera poco, también si cambiamos el formato de una celda remota, aún si ingresar ningún valor, Excel la considerará la última celda usada.

Para asegurarnos de encontrar siempre la última celda usada, es decir, la celda más remota que contiene algún valor, tenemos que usar un código basado en el método Range.Find

Sub ultima_celda()
    Dim UltimaFila As Long

    If WorksheetFunction.CountA(Cells) > 0 Then

        UltimaFila = Cells.Find(What:="*", After:=[A1], _
              SearchOrder:=xlByRows, _
              SearchDirection:=xlPrevious).Row

         MsgBox UltimaFila, vbInformation, "Ultima fila"

    End If

End Sub


Este código encuentra la última celda y nos informa cuál es la fila con un mensaje.

Este video nos muestra la diferencia entre ambos métodos



4 comments:

Toñi Moreno Lamas 31 mayo, 2013 15:55  

¡Por fin!
Me estaba volviendo loca con este tema. Muchas gracias, genial.
Toñi

Anónimo,  31 mayo, 2013 21:28  

Hola Jorge,
Cuando se fuerza a que Excel cuente las filas del rango UsedRange dentro de una hoja, Excel vuelve a ajustar el valor de la última celda al rango realmente utilizado.

UltimaFila = Worksheets(1).UsedRange.Rows.Count

Lo único que hay que tener en cuenta es que si tenemos alguna fila "no usada" al inicio de la hoja, UsedRange no la tendrá en cuenta por lo que habrá que sumarla a UltimaFila.

Jorge Dunkelman 01 junio, 2013 10:44  

Hola,

puedes superar el problema de las filas al inicio de la hoja usando el método Range.SpecialCells de esta manera

Sub ultima_celda3()
Dim ultima_fila As Long

With ActiveSheet
.UsedRange
ultima_fila = Cells.SpecialCells(xlCellTypeLastCell).Row
End With

MsgBox ultima_fila, vbInformation

End Sub

El problema con estos métodos es que si aplicas formato a alguna celda remota, como señalo en la nota, la última fila no será la de la última celda que contiene algún valor.
Este último problema se soluciona con Cells.Find

José Manuel Agundis 09 junio, 2013 19:52  

Buenos días Maestro:
Veamos si estoy bien, para llegar a la última celda con captura o con un formato tecleo CTRL+FIN y en efecto me envía a la última celda, lo que hago es eliminar las filas y/o columnas que hay en blanco y después guardo cambios; esto para quitar peso al archivo, más aún he detectado que por esta causa se nos vuelve el archivo más pesado y/o lento y creo pensamos erróneamente que el problema reside en otras cosas (cálculo, tablas, formularios, etc.).
Creo es importante depurar nuestras hojas para acelerar la carga y descarga de archivos y por último sugiero humildemente utilizar la extensión .xlsb (binario) a mi me ha dado gran resultado.
Saludos y buen día desde México.

Publicar un comentario

Google+ Followers

Seguidores

Google+ Badge

Términos Legales

  © Blogger template On The Road by Ourblogtemplates.com 2009

Back to TOP