Encontrar la última fila con VBA

Cuando queremos automatizar el ingreso de datos en nuestras hojas de Excel, es inevitable tener la necesidad de encontrar la última fila con valor, de esta manera podremos indicar en nuestro código la fila donde se realizará la inserción.

Existen varios métodos en VBA para encontrar la última fila que contiene datos y hoy te mostraré tres maneras diferentes de hacerlo. Revisaremos cada uno de los métodos para encontrar sus diferencias y sus ventajas.

Descargar archivo de trabajo

Encontrar la última fila con UsedRange

UsedRange es una propiedad del objeto Worksheet y nos devuelve el rango de celdas utilizadas en una hoja.  Por ejemplo, en la siguiente imagen, el rango utilizado es A1:C3.

Encontrar la última fila con VBA

Por el contrario, el rango utilizado en la siguiente imagen es el rango A1:D7.

Última celda con datos en Excel

Una vez que tenemos identificado el rango utilizado, podemos recurrir al método SpecialCells que nos devolverá aquellas celdas que cumplen con determinado criterio. En nuestro ejemplo nos interesa obtener la última celda en uso y por lo tanto utilizaremos la constante xlCellTypeLastCell como el criterio para el método SpecialCells:

ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell)

Lo último que debemos hacer es obtener la fila de esa última celda utilizando la propiedad Row. De esta manera, nuestra macro para obtener la última fila con datos será la siguiente:

Sub UltimaFila_1()
 
    MsgBox ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row

End Sub

La siguiente imagen muestra el resultado después de ejecutar esta macro sobre los datos de ejemplo. Observa que el resultado es la fila 7.

Última fila ocupada en una columna

Puedes encontrar problemas cuando tienes algún valor que se encuentre por debajo de las filas de datos ya que eso ocasionará que la macro devuelva una fila mayor a la esperada. Por ejemplo, la siguiente imagen muestra un caso donde las celdas F9 y G9 tienen un valor y por lo tanto la macro devolverá la fila 9 la cual es mayor que la última fila en el rango de datos.

Macro para encontrar la última fila con valor

Si te encuentras en esta situación, entonces debes considerar la alternativa con la propiedad End la cual revisaremos a continuación.

La propiedad End y la última celda con datos

Este método comienza por obtener una referencia a la última celda de una columna utilizando una instrucción como la siguiente:

ActiveSheet.Cells(Rows.Count, "A")

La instrucción Rows.Count nos devuelve el total de filas de la hoja y por lo tanto obtendremos la última celda de la columna A. En seguida utilizaré la propiedad End, que me ayudará a simular el atajo de teclado Fin + Flecha arriba, y con eso puedo “subir” a la última celda con datos de la columna.

ActiveSheet.Cells(Rows.Count, "A").End(xlUp)

Una vez que estamos ubicados en la última celda con datos, podemos obtener su fila con la propiedad Row. El código de nuestra macro es el siguiente:

Sub UltimaFila_2()
 
    MsgBox ActiveSheet.Cells(Rows.Count, "A").End(xlUp).Row

End Sub

La siguiente imagen muestra el resultado de ejecutar esta macro sobre los datos de ejemplo. Observa que la macro nos devuelve el valor 10 que es la última fila que tiene un valor.

Última fila de un rango con VBA

La única condición para que este método funcione correctamente es elegir la columna adecuada que nos ayudará a determinar la última fila en los datos.

La única ocasión en la que este método no devolverá el resultado correcto será cuando exista un valor en la última fila de una columna. Pero la probabilidad de que tengas un valor en la fila 1,048,576 es casi inexistente, y por esa razón este método es ampliamente utilizado.

La última fila en uso con Find

Aunque los métodos anteriores funcionan muy bien y son ampliamente utilizados por los programadores de Excel, es muy probable que también encuentres publicada esta última alternativa en los libros de Excel o en Internet.

Este método utiliza el método Find para encontrar la última celda con valor. El primer parámetro del método es la cadena de búsqueda donde colocaremos un asterisco (*) para indicarle que queremos encontrar cualquier valor.

El segundo argumento es la dirección de la búsqueda SearchOrder donde le pediremos que haga una búsqueda por fila. Por último, el parámetro SearchDirection tendrá el valor xlPrevious que le pedirá a Excel encontrar el valor previo. Esto quiere decir que, en una búsqueda hacia atrás, el valor previo será la última celda con un valor. El método Find que utilizaremos será el siguiente:

Find("*", searchorder:=xlByRows, searchdirection:=xlPrevious)

Si combinamos este método con alguna columna de nuestros datos, tendremos el código necesario para obtener la última fila en uso.

Sub UltimaFila_3()
 
    On Error Resume Next
    MsgBox ActiveSheet.Columns("A").Find("*", _
        searchorder:=xlByRows, searchdirection:=xlPrevious).Row

End Sub

La siguiente imagen muestra el resultado al ejecutar esta macro sobre los datos de ejemplo. Considera que existen filas vacías entre los datos y aun así la macro devuelve la última fila correctamente.

Identificar la última fila en uso con VBA

En esta macro he agregado la línea On Error Resume Next porque si la columna está vacía, entonces el método Find devolverá un objeto vacío y por lo tanto causará un error. Es necesario agregar más código en caso de querer manejar adecuadamente dicho error, pero eso será tarea para otra publicación.

Insertar un valor en la primera celda vacía

Para finalizar, haremos un ejemplo práctico donde utilizaremos el código de las secciones anteriores para insertar un valor en la primera celda vacía de una columna. Nuestro objetivo será insertar la hora actual al final de una columna con solo pulsar un botón.

Aunque puedes utilizar cualquiera de las macros de los ejemplos anteriores, he decidido utilizar el método de la propiedad End. Así que, crearé un botón ActiveX y colocaré el siguiente código en su evento Click:

Private Sub CommandButton1_Click()

    Dim ultima As Long
    ultima = ActiveSheet.Cells(Rows.Count, "A").End(xlUp).Row
    Cells(ultima + 1, 1).Value = Time

End Sub

Después de obtener la última fila con datos, sumamos uno para obtener la primera fila vacía y poder insertar la hora. La siguiente imagen muestra el resultado después de haber pulsado tres veces el botón.

Ir a la última celda con datos

67 comentarios en “Encontrar la última fila con VBA

  1. juan

    excelente, gracias, gracias, ayer estuve buscando información sobre esto.

  2. Ricardo

    Gracias por compartir tus conocimientos.

  3. David

    Muchas gracias por el compartir. Son muy claros los ejemplos.

  4. wendy

    excelente felicitaciones, es de gran utilidad

  5. Alejandro

    Gracias por esta información, mil gracias

  6. Carlos friely

    Muy buena ayuda para los que usamos excel gracias

  7. Carlos Gonzalez

    Gracias por compartir, esta excelente.

  8. MARIA LUCIA DUQUE

    MUCHAS GRACIAS POR EL DATO ERES MUY AMABLE SE LE AGRADECE CHAO

  9. Román Osorio

    Felicidades hermanos, tus explicaciones son impecables, excelente, gracias por compartirlos, excelente trabajo…

  10. Jina

    Genial, me gusta cómo explican cada ejemplo y la voz del narrador.

  11. Blanca

    Muchas gracias por ayudarnos, siempre me a costado trabajar con EXEL, ahora ya estoy comprendiendo.

  12. Uriel R

    Excelente enseñanza son de mucha ayuda y muy bien explicado

  13. Oscar

    Excelente información, gracias por compartir tus conocimientos

  14. Libardo González Suárez

    Siempre encontré dificultad para aprender a manejar excel. tus explicaciones lo hacen muy fácil. mil y mil gracias. ya me hace falta encontrar publicaciones.

  15. Ma. Guadalupe Torrez Cabrera

    MUCHAS GRACIAS POR COMPARTIR TUS EXPLICACIONES SON MUY ENTENDIBLES. GRACIAS ES MUY AMABLE.

  16. Wilfredo Delgado

    Nítido, de gran ayuda muchas gracias.

  17. Andrea

    Gracias han sido de mucha utilidad las explicaciones que compartes

  18. Ernesto

    muchas gracias. muy clara explicación.

  19. Arnoldo

    Muchas Gracias, se te entiende muy bien me pondré a practicar

  20. Armando Pérez Avila

    Gracias por compartir tu conocimientos que tanto ayudan,

  21. Alvaro Morales

    Son muy interesantes y útiles tus tips, gracias y saludos.

  22. Victor Manuel Morales De León

    gracias por la información y compartir tus conocimientos son de mucha ayuda para mi gracias

  23. JAVIER CLEMENTE

    Muchas gracias por compartir tus conocimientos

  24. Jone

    Gracias por compartir tus conocimientos de forma tan transparente.

  25. Juan Pedro

    Excelente. No se puede ser más claro. Yo usaba siempre el primer método, ahora ya he aprendido algo más. Muchas gracias por el aporte

  26. Carlos Padrón

    Muchas gracias, por compartir estos conocimientos, tan claros y fácil de seguir. Ya hace unos meses estuve buscando información de este tipo y estuve páginas y páginas de lectura para encontrar algo como lo explicado aquí. GRACIAS NUEVAMENTE.

  27. Alfredo Marin

    Muy bueno, gracias por compartir tus conocimientos

  28. Ana María

    Muchísimas gracias por compartir sus conocimientos, son siempre muy útiles y didácticos.

  29. Santos

    Muy importante y apropiado el aporte, gracias

  30. Didier Obregon

    Excelente, justo lo que necesitaba para aplicarlo en mi trabajo. Muchas Gracias.

  31. Fernando

    Qué buen MAESTRO es usted. Hace “fácil” entender técnicas que tenía “atragantadas” desde hace tiempo. Muchas gracias por compartir sus conocimientos

  32. bernardo

    gracia por el tema presentado sera de gran ayuda. Seria posible para la próxima, sobre las formulas de matemáticas y estadística. gracia por todo

  33. Carlos González B

    Moisés, excelente tu sitio y tu forma de enseñar las herramientas de excel. Te felicito por ser generoso en la entrega de conocimiento desinteresado, algo difícil de ver hoy.

  34. Diana-Panamá

    NO PUEDO ENCONTRAR LA VENTANA DE DESARROLLADOR PARA REALIZAR EL EJERCICIO, TENGO UNA OPCIÓN DE COMPLEMENTO PERO NO PUEDO ENCONTRAR LOS COMANDOS QUE UTILIZA. PODRÍA DECIRME COMO ACTIVARLOS?.

    1. Moises Ortiz Autor

      Diana, en la siguiente página encontrarás los pasos para mostrar la pestaña Desarrollador. Por favor, considera que en versiones anteriores esta pestaña se llamaba Programador, y el artículo hace referencia a dicho nombre:
      https://exceltotal.com/mostrar-la-ficha-programador/

  35. Jorge Montero

    Gracias, estoy muy contento con su valioso aporte.

  36. jose francisco kuyoc lopez

    Excelente aporte, es de mucha utilidad en mis labores, gracias

  37. José Delfino

    Muchas gracias por esta información tan valiosa.

  38. Engelberth Ibañez

    Excelente tu aporte, Muchas gracias.

  39. Gabriel Santiago

    Excelente ,realmente es un aporte para todos. Saludos desde Antofagasta,Chile

  40. salvador

    Excelente material para poder combinar y adaptar de acuerdo a nuestras necesidades. Gracias

  41. benito arias

    gracias por compartir tus conociientos

  42. Henrry L.

    Gracias por tu aporte para un mayor conocimiento de excel.

  43. Marciano

    Gracias muy amable por su conocimiento. Compartir el conocimiento es una acción de seres inteligentes, que han comprobado que el conocimiento es un bien que crece a medida que lo comparte. (Héctorl Vogel)

  44. Ramon

    A ponerlo en practica gracas Moises

  45. TALLEDO MORALES TANIA KARIN

    Gracias por proporcionarnos grandes ayudas.

  46. David Santiago

    Aprecio bastante el tiempo dedicado y la claridad de tus explicaciones, pues son de gran ayuda siempre. He utilizado este código con muy buenos resultados. Es genial tu aporte a nuestro conocimiento.

  47. Raizor

    Excelente, ahorita veo como acomodo la macro a mi necesidad de insertar datos a la fila en limpio de x columna, Gracias.

  48. jl

    La gestión de bases de datos es la aplicación principal para la que uso las macros, y este aspecto es crucial. Yo había desarrollado otras formas de encontrar el último registro, pero estos métodos que nos enseñas me obligan a revisar mis procedimientos. Excelente aporte!

  49. Alexis

    Muchas gracias. Que buen material.

  50. Juan Pablo Tobar Cifuentes

    Excelente, es práctico y rápido, algo parecido lo use anteriormente

  51. Donald

    Hola. Muchas gracias por los cursos y las descargas. Es un buen material y se que estoy aprendiendo mejor…gracias.

  52. Antonio

    Como puedo hacer para que en lugar de la ultma fila con datos me muestre el dato existente en la ultima fila, es decir, en la columna A tengo datos y quiero que me muestre el ultimo dato agregado.
    Gracias y un saludo

    1. Moises Ortiz Autor

      Hola Antonio, utiliza la propiedad .Value al final de la línea de código, en lugar de .Row.

  53. A. Villegas

    ¡”Excel-ente”! Es una lástima que en muchas empresas quienes se encargan de todo lo referente a informática, no permitan hacer uso de VB, pues dejan las restricciones de Office al tope.

  54. ELIZABETH

    Gracias por enseñarnos nunca se termina de aprenderá GRACIAS POR TODO LO QUE NOS ENSEÑA MUCHISIMAS GRACIAS.

  55. Limber

    muy bien por su ayuda

  56. RENATO VARGAS

    MOISES MUY BUENO LO QUE COMPARTES TUS CONOCIMIENTOS DE EXCEL, APLAUDO TU TALENTO.

  57. Alejandro Amaro F

    Buen día excelente muy buena función y el ejemplo para utilizarlo es muy claro y entendible gracias.

  58. Antonio Maldonado

    Gracias muy Util, desde Colombia

  59. Arsenio

    Muchas gracias, por tu aporte y sobre todo la claridad de explicación.

  60. anibal ibarra

    EXCELENTE EXPLICACION SERA DE MUCHA VALIA PARA PONER EN PRACTICA

  61. cristy

    Muchas Gracias, por su ayuda y por la claridad de la explicación

  62. Rodrigo

    Gracias aprendo en cada tutorial y por la sencilles de como lo explicas se hace facil comprender

  63. Luis Fonseca

    Muy buenas macros y muy practicas para su aplicación
    gracias

  64. Christhian

    Muy bueno, gracias.

  65. Adal

    muy buen ejemplo!, buena manera de explicarlo mejor imposible!

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Solo se aceptarán comentarios relacionados con el artículo publicado.