Excel Avanzado

Macros, Vba en Excel y muchos ejemplos de nuestro Curso de Excel Avanzado

Excel Avanzado

Identificar la última fila en uso con VBA

| 50 comentarios

¿En qué nos ayudaría identificar la última fila en uso?

Usualmente las bases de datos en Excel tienen mucha información; por eso,  perderíamos tiempo buscando el último dato con la barra de desplazamiento.
Sin embargo, esto se puede solucionar, haciendo uso de las macros.

¿Qué código podemos usar para buscar la última fila?

Sub BuscarUltimaFila()

Dim ult As Integer
ult = Cells(Rows.Count, 1).End(xlUp).Row
MsgBox ult

End Sub

Ahora entendamos el código:

Cells(Rows.Count,1) = Al usar Rows.Count estamos contando todas las filas disponibles en excel cuyo valor seria 1048576. Como lo usamos en un Cells, estaremos seleccionando la fila 1048576. El "1" indica la columna en la cuál se esta trabajando ("A") .

End(xlUp) = Estamos indicando que desde la fila indicada (1048576), "suba" hasta que encuentre un valor.

Row = Indicamos que grabe el número de la fila ocupada encontrada.

MsgBox ult = Mostramos ese valor en un cuadro de texto.

 

Seleccionar la última fila en VBA

Ahora, si queremos seleccionar esa celda podemos agregar el siguiente código:

Sub BuscarUltimaFila()

Dim n As Long
countult = Cells(Rows.Count, 1).End(xlUp).Row
MsgBox countult
Cells(Rows.Count, 1).End(xlUp).Select

End Sub

Como podemos observar, en vez de .Row , le ponemos .Select

Última fila libre en VBA

Alternativamente, si queremos buscar la última fila libre, haremos uso del Offset:

Sub BuscarUltimaFila()

Dim n As Long
countult = Cells(Rows.Count, 1).End(xlUp).Offset(1,0).Row
MsgBox countult
Cells(Rows.Count, 1).End(xlUp).Offset(1,0).Select

End Sub

Con Offset(1,0) , al encontrar la última fila en uso, saltamos 1 fila más la cual sería la última fila libre.

Descargar ejemplos de identificación de última fila

------------------

Elaborado por: Daniel Eduardo Espinoza Rodriguez

50 comentarios

  1. Excelente aporte.
    Ejemplo de mucha utilidad en programación. Seguro lo voy a utilizar constantemente.

  2. Ante todo gracias por este maravilloso ejemplo.

    Esta rutina me interesa:

    Sub BuscarUltimaFila()
    Dim n As Long
    countult = Cells(Rows.Count, 1).End(xlUp).Row
    MsgBox countult
    Cells(Rows.Count, 1).End(xlUp).Select
    End Sub

    Pero tengo una duda. Supongamos que la ultima fila es la 20 y quiero hacer una selección de B20:M20 que tendria que incluir en el código??

    Gracias.

    • Perdón, me respondo a mi mismo...

      Sub BuscarUltimaFila()

      Dim n As Long
      countult = Cells(Rows.Count, 2).End(xlUp).Row
      Range("B" & countult & ":M" & countult).Select

      End Sub

      • Amigo me podrías ayudar, tengo excel 2013 y precisamente estoy buscando montar un filtro en un inventario pero cada vez que se ingrese un nuevo articulo se actualice el rango de búsqueda y por eso es que quiero saber como meter una variable en un rango, trate con tu código pero me dijo error de sintaxis no me agarra no sabes como podría hacer o como lo hiciste tu para seleccionar un rango que tenia variables de por medio?

        • Perdón, me respondo a mi mismo…también conseguí como gracias y disculpa 😀

          Sub BuscarUltimaFilaYSelectConVariable()

          Dim n As Long
          ult = Cells(Rows.Count, 2).End(xlUp).Row
          RANGO = ("B" & ult & ":I" & ult)
          Range(RANGO).Select
          End Sub

  3. muy util para trabajar con base de datos se podria agregar codigo para ordenar la lista

  4. Hola, estuve viendo estos codigo, parece ser muy util. pero tengo una gran duda: el codigo va en un formulario form de Vb 6.0? digo porque no se como hacer que ese codigo responda si primero no se establece una conexión con el archivo excel.. o sea esa conexion como es que se hace, si es que es ncesario.. Disculpe mi ignorancia..

    • El programa excel tiene una parte Visual Basic que puedes ver en la ficha programador. Esta ficha está desactivada por defecto, pero puedes activarla en opciones, " mostrar ficha programador

  5. El delimitar el rango hasta la ultima celda con datos, ayuda mucho sobre todo cuando se analiza y cruza información entre varias tablas y una de ellas varia constantemente en cuanto a nro de registros. Antes de conocer esta opcion de VBA solia considerar rangos muy largos y el resultado a la vista no era lo deseado, aunque para mi trabajo era suficiente, sin embargo ahora que debo compartir ese proyecto es oportuno el uso de esta función.

  6. La rutina no es completa. Solo ubica la ultima celda del columna A. ¿Que pasa si en las columnas B, C y en adelante hay datos pero no en la 1?.

    • Hola Roger

      Efectivamente la rutina se basa en la columna A, ... tal como lo en realidad lo veo ... si necesito que se base en la columna B, lo cambiaría para que funcione en la B, solo cambiaría el código por aquella columna cuyo dato sea obligatorio .... si de todas formas necesitas basarte en todo el cuadro, asumiendo que no tienes otro contenido que interfiera con tu cuadro, podrías usar: specialcells

      https://learn.microsoft.com/en-us/office/vba/api/Excel.Range.SpecialCells

      En este caso se suma la complejidad que si usas xlCellTypeVisible pues tendrías que grabar antes de hacer tu cálculo, y no siempre va a ser conveniente tener que estar grabando cada vez que tengas que hacer el cálculo

    • En ese caso quisieras usar tal vez la selección de una celda dentro del rango y emplear currentregion o used range, dependiendo de la finalidad con que lo quieras usar, por otra parte si lo q quieres es que específicamente busqué la última de cada celda asignale una variable a la columna y recorre con un loop para buscar el mayor valor

  7. Excelente aporte, pero me surge una duda.

    Si tenemos una tabla delimitada por el rango A1:C15 la cual por alguna razón no se llena, digamos que el último valor en la tabla está en la celda A10, con el código, el valor que nos trae sería 15 pero no es cierto, tendría que ser el 10 porque en esa fila es donde se encuentra nuestro último dato.

    ¿Cómo podemos resolver este caso? Espero haberme dado a entender.

    Saludos.

  8. Hugo, yo tengo el mismo problema. Quiero seleccionar la ultima fila llena que empieza en la columna C.
    Yo querrIa ir a la ultima fila que tiene datos en la columna C.
    Como ubicarme.
    Ademas los datos se estan pasando desde un bucle y aún estan en memmoria, funciona igulamente?

  9. Para Hugo. Desconozco que función hace en ese código la variable n (long).

  10. Buen aporte,
    pero tengo uan duda espero puedan ayudarme, tengo un formulario de VB en excel, lo que deseo es que me capture el ultimo codigo y le aumente en una unidad, por ejemplo tengo mi registron productos y en ultio tiene codigo C00458, al agregar uno nuevo que tome como referencia este ultimo codigo y solo le aumente una unidad es decir en el campo codigo del nuevo registro salga C00459, gracias... Ah, solo me bastaria ver el dato de la coumna A

    • Bro, en ese caso tocaria anadir una linea que extraiga el valor del numero y otras que concatenen:
      N=Cint(right("Codigo",5)) 'Codigo es la variable q contenga el valor del cod
      select case 5-len(cstr(N))
      case 0
      Codigo="C"& N
      case 1
      Codigo="C0"&N
      case 2
      Codigo="C00"&N
      end select
      a modo general asi funcionaria, espero le ayude

  11. Tengo entendido que offset es como un manipulador de cursores direccionales, esta función me parece muy útil, en mi caso yo registro en una hoja a parte datos de historias clínicas y siempre se me hizo difícil ubicar la última posición libre de una fila para ingresar una nueva historia clínica...excelente.

  12. como seria para la detectar la ultima columna?

  13. Excelente. Gracias.
    Una consulta, si estoy a tiempo, yo tengo una tabla y me interesa después de salir de Datos Filtrados, poderle dar a un botón y que se me vaya a la última fila, pero se me va a la última fila de la tabla.
    ¿Cómo lo puedo hacer?

  14. Se pasaron, exelente tutorial, ya que este mismo ejemplo lo estaba buscando en videos y no encontre nada.
    Excelente aporte. Felicitaciones

  15. Excelente aporte!!!!

  16. Interesante y si fuera columnas?

  17. hola, muchas gracias, me sirve mucho, pero necesito que no aparezca ese cuadro de dialogo, que solo seleccione la celda, se puede hacer eso???

    • Solo elimina esa línea de código. Pero a estas alturas, ya lo habrás hecho.

  18. esta muy bien tu rutina pero me puedes decir enque parte lo tengo que insertara a una rutina que ya tengo hecha...Sub Macro1()
    '
    ' Macro1 Macro
    ' CORTE
    '

    '
    Sheets("DATA SHEET").Select
    ActiveWindow.SmallScroll Down:=-18
    Range("A1:AZ3").Select
    Selection.Copy
    Sheets("REPORTE").Select
    Range("A7").Select
    Selection.Insert Shift:=xlDown
    Range("A.ROW.COUNT").Select
    Sheets("DATA SHEET").Select
    Application.CutCopyMode = False
    Range("A1:AZ1").Select
    Sheets("Sheet1").Select
    Range("C4").Select
    End Sub

  19. Buen dia.
    Este codigo es buenisimo, pero como haria para aplicarlo en un combobox y que me mostrara el consecutivo siguiente?
    De antemano les agradesco si me pueden ayudar.

  20. Buenas dias gracias por sus aportaciones que es de gran ayuda, consulta,
    Tengo una tabla con titulos en la columna A1 proyectos, A5 mantto A15 seguridad ,A25 calidad....etc y en la columna B,C,D el contenido que conforman cada uno de de estos titulos....
    quisiera una macro que inserte una fila en blanco encima de A1, de A5 de A15 ...tener en cuenta que de A2:A4 esta vacio de A6:A14 esta vacio....y asi sucesivamente....

    Osea que busque las filas en base a la Columna A que tenga contenido...y que le inserte encima una fila vacia...

    por favor su apoyo gracias

Página de comentarios 1 de 2
1 2

Deja una respuesta

Los campos requeridos estan marcados con *.