Ir a la última celda con datos o primera celda vacía en Excel

Compatibilidad: Truco compatible con Excel 365Truco compatible con Excel 2016Truco compatible con Excel 2013Truco compatible con Excel 2010Truco compatible con Excel 2007

Al crear macros con VBA es normal tener que ir a la última celda con datos o primera celda vacía en Excel.

 

La propiedad Range.End y ActiveCell.End devuelve un objeto que representa la celda al final de la región que contiene el rango de origen.

– Range("A1").End(xlDown) / ActiveCell.End(xlDown)A ABAJO.

– Range("A1").End(xlToLeft) / ActiveCell.End(xlToLeft) A LA IZQUIERDA.

– Range("A1").End(xlToRight) / ActiveCell.End(xlToRight)A LA DERECHA.

– Range("A1").End(xlUp) / ActiveCell.End(xlUp) A ARRIBA.

Ir a la última celda con datos o primera celda vacía en Excel: xlUp, xlToRight, xlToLeft y xlDown

En el rango A1:A6 de nuestra hoja Excel, disponemos de los siguientes datos (incluye celdas vacías):

 

 ABCDE
1NombreFechaImporte Verificado
2Juan01/01/201625 Ok
3Ana 22 Ok
4Luis05/02/201622 Ok
5    Ok
6Rosa05/01/2016222 Ok

 

  1. Con Excel abierto.

  2. Pulsar la tecla Alt y mantener pulsada / Pulsar la tecla F11. Mostrará el editor de Visual Basic.

  3. Ir a: Barra de Menú / Insertar / Módulo. Mostrará la ventana del módulo donde escribimos la macro.

  4. Escribir el código de la macro:

  5.  

  • ÚLTIMA CELDA CON DATOS EN UNA COLUMNA

Selecciona la última celda de una columna de datos en el rango de A1.

Sub UltimaCelda_Columna ()

Range("A1").End(xlDown).Select

End Sub

O también, ActiveSheet.Range("A1").End(xlDown).Select
O también, Range("A1").End(xlDown).Offset(0, 0).Select

Desde la celda activa A1 se desplaza a la celda A4 última con datos (A5 celda vacía).

Hoja Excel: Celda activa A1 desplazada a A4
  • PRIMERA CELDA VACÍA EN COLUMNA

Selecciona la primera celda vacía de una columna de datos en el rango de A1.

Sub UltimaCelda_Columna ()

Range("A1").End(xlDown).Offset(1, 0).Select

End Sub

O también, ActiveSheet.Range("A1").End(xlDown).Offset(1, 0).Select

Desde la celda activa A1 se desplaza a la celda A5 como primera vacía.

Hoja Excel: Celda activa A1 desplazada a A5
  • ÚLTIMA CELDA DE UN RANGO

Selecciona la última celda del rango de la celda activa (considerando que estamos en A1).

Sub UltimaCelda_Columna ()

ActiveCell.End(xlDown).End(xlToRight).Select

End Sub

Desde la celda activa A1 se desplaza a la celda A4 y de allí a C4 como primera vacía.

Hoja Excel: Celda activa A1 desplazada a C4
  • ÚLTIMA COLUMNA CON DATOS DE LA FILA

Selecciona la última columna de la fila activa (considerando que estamos en A1).

Sub UltimaCelda_Columna ()

Range("A1").End(xlToRight).Select

End Sub

Desde la celda activa A1 se desplaza a la celda C1 como última celda con datos (D1 celda vacía).

Hoja Excel: Celda activa A1 desplazada a C1
  • PRIMERA CELDA VACÍA (COLUMNA) DE LA FILA

Selecciona la última columna de la fila activa (considerando que estamos en A1).

Sub UltimaCelda_Columna ()

Range("A1").End(xlToRight).Offset(0, 1).Select

End Sub

Desde la celda activa A1 se desplaza a la celda D1 como la primera celda vacía (a la derecha).

Hoja Excel: Celda activa A1 desplazada a D1
  • ÚLTIMA CELDA CON DATOS DE LA HOJA

Selecciona la última celda con datos (considerando celdas vacías).

Sub UltimaCelda_Columna ()

ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Offset(0, 0).Select

End Sub

Desde la celda activa A1 se desplaza a la celda E6 como última celda de la hoja.

Hoja Excel: Celda activa A1 desplazada a E6
  • PRIMERA CELDA VACÍA (CON FILAS VACÍAS) DE LA HOJA

Las celdas vacías estén separadas una distancia constante (una de cada dos celdas de la columna está vacía).

Sub UltimaCelda_Columna ()

Do Until IsEmpty(ActiveCell) And IsEmpty(ActiveCell.Offset(1, 0))

ActiveCell.Offset(2, 0).Select

Loop

End Sub

– Configurar el bucle Do para que se detenga cuando se alcancen dos celdas
consecutivas vacías.
– Bajar 2 filas de la ubicación actual.

Desde la celda activa A1 se desplaza a la celda A7 como la primera celda vacía de la columna.

Hoja Excel: Celda activa A1 desplazada a A7

 

– Consultar: Valor de la última fila con datos.

– Consultar: Valor de la última fila con datos de una columna.

Nivel de dificultad: Experto VBA-Macros Excel Experto VBA – Macros

20 comentarios en “Ir a la última celda con datos o primera celda vacía en Excel

  • Excelente explicación. Concreta y clara.
    Tengo una duda:

    Cómo hago para que ese código sea infinito?
    Es decir, que llene siempre la última celda vacía de una fila y columna que aumente conforme se introducen datos.
    Ejemplo:
    Introduzco datos en la fila A1 hasta la A7, pero el siguiente dato debe ubicarse en la fila A8, pero el código esta hasta la A7 y así sucesivamente. Igual con las columnas.
    Gracias

    • Hola Dennis,

      Interpreto que lo que necesitas es situarte en la primera fila o columna vacía.

      El código es el indicado en el post:
      – Primera celda vacía (con filas vacías) de la hoja.
      – Primera celda vacía (columna) de la fila.

      Otra forma de incluirlo sera:

      – PRIMERA FILA VACIA:

      Sub ultimafila()
      Dim ultimafila As Integer
      ultimafila = Cells(Rows.Count, 1).End(xlUp).Row
      Cells(ultimafila, 1).Offset(1, 0).Select
      End Sub

      – PRIMERA COLUMNA VACIA

      Sub ultimacolumna()
      Dim ultimacolumna As Integer
      ultimacolumna = Cells(1, Columns.Count).End(xlToLeft).Column
      Cells(2, ultimacolumna).Offset(-1, 1).Select
      End Sub

      Saludos,

  • Gracias. Pero el problema es que sólo se llega a la fila y columna definida, pero necesito ingresar datos de manera progresiva, es decir, cargar datos en K1,J2,I3,H4 y G5, pero el siguiente datos va en L1,K2,J3,I4,H5 y G6 y así sucesivamente.
    Gracias de nuevo y felicitaciones por la forma de exponer las fórmulas.

  • Hola.
    ¿Si yo quisiera que fuese automático al pulsar enter?

    En mi hoja excel tengo que poner varios datos por filas empezando en la B5, C5, D5, E5 pasando de aquí a la B6, C6, D6 y E6, … el paso por filas lo haría con el cursor flecha a derecha, pero una vez llegado a E5 lo que haría es dar enter y querría que se posicionara en el B6 que sería la primera celda vacía de la columna B, y así indefinidamente con las siguientes filas según vaya rellenando datos, la fila 7, la 8, la 9 etc…

    ¿Es esto posible?

    Muchas gracias.

  • hola, necesito copiar datos de mi hoja 1 a la hoja 2, pero al pegar los datos en la hoja 2 necesito que se situe en la primera fila vacia. como lo puedo hacer?
    saludos

  • Hola muchas gracias por estas macros, una de ellas me viene muy bien para empezar a rellenar la siguiente fila de una tabla.
    Una consulta. Al ejecutar esta macro me interesaría que a su vez y en la misma celda que se marca al ejecutarla me escribiese el numero siguiente a la anterior celda, o sea, si la celda anterior con datos es la A20 y en ella está escrito en numero 25, al ejecutar la macro tendría que posicionarme en la celda numero A21 y escribir en ella el numero siguiente a la anterior, o sea, 26. ¿Como lo podría hacer?.

    Saludos

  • Hola, he probado buscar la ultima celda vacía en la columna A con una tabla y con tabla no funciona, aunque las celdas de la tabla estén vacías, busca la primera celda vacía fuera de la tabla. Me podéis ayudar para que lo haga con tablas?. gracias, saludos

  • Se me planteo la siguiente duda. Tengo que usar una formula para 1 millon de lineas. Si pongo la formula y arrastro me colapsa el archivo.

    Lo que necesito es una macro que me copie la formula de la fila de arriba (Ej: B4). Me la pegue en B5 y pegue a valor la B4.

    Asi sucesivamente para abajo hasta el ultimo dato que tengo en la columna A

    Me podrian ayudar?

    Desde ya muchas gracias!

  • Buenas noches
    Desearia saber cual es la macro para insertar al final de una plantilla, una formula que sume toda la columna, desde la ultima fila, por ejemplo, desde la fila 100 hasta la fila 2 (El resultado tendría que estar en la fila 101)
    Muchas gracias

  • Buenos días estimados!

    1- Estoy necesitando seleccionar y copiar una columna entera, hasta la última celda con datos habiéndome situado en la celda de encabezado. Y necesito que incluya los espacios vacíos (celdas vacías). Es decir que seleccione y copie hasta que encuentre solo celdas vacías. Justamente para asegurarme que no quedan celdas con datos más abajo.

    2- Por otra parte si pueden ayudarme tengo otra duda y es que necesito con un botón abrir un explorador de archivos, luego seleccionar el archivo, abrirlo y que luego comience a seleccionar y copiar columnas (el código del punto 1) desde ese archivo abierto a uno que abriría al principio (el que contiene los botones y el código VB).

    Yo hice este código que pego debajo. El problema con el mismo es que:
    A- el nombre del archivo desde donde selecciona y copia, es fijo. Si el nombre del archivo cambia el código no sirve. (Pregunta 2)
    B- el rango de columnas seleccionadas para copiar es fijo. Si hay datos más allá de la fila 4170 no serán copiados. Por eso quiero cambiar el rango desde por ej: “A2:a la última celda con datos de la columna A” en vez de “A2:a4170”. (Pregunta 1)

    Mi código:
    Sub IMPORT_RENEW()

    ‘ IMPORT RENEW Macro

    Windows(“Global Renewals Population 07-21-2017 updated.xlsx).Activate
    Range(B2:B4170”).Select
    Selection.Copy
    Windows(“Template v3.xlsm”).Activate
    Range(“B12”).Select
    ActiveSheet.Paste
    Windows(“Global Renewals Population 07-21-2017 updated.xlsx).Activate
    Range(H2:H4170”).Select
    Selection.Copy
    Windows(“Template v3.xlsm”).Activate
    Range(“C12”).Select
    ActiveSheet.Paste
    Range.(“B11”).Select
    End Sub

    • Hola Kike,

      – Punto 1. Copiar columna.Como no especificas donde están las columnas, en misma hoja, mismo libro, libros diferentes, etc. El ejemplo muestra en diferentes hojas:

      Private Sub copiacolumna()
      Worksheets(“Hoja1”).Range(“A:A”).Copy
      Worksheets(“Hoja2”).Range(“B:B”).PasteSpecial xlPasteAll
      Application.CutCopyMode = False
      End Sub

      – Punto 2.
      Como el tema es más amplio en breve publicaremos un post con las posibilidades.

      Saludos.

      • Gracias por tu respuesta. El problema de copia columnas enteras es que si luego yo deseo copiar en un rango más chico no me va a dejar. Por eso necesito que copie “desde” la celda que yo le diga (por ejemplo A2, “hasta” la última celda de esa columna (la última fila) donde encuentre datos.. No me sirve copiar la columna entera porque cuando quiera pegarlo en la celda A2 de destino encontrará espacio insuficiente porque copié una columna completa.
        Googleando mucho encontré algunos códigos que “leen” la última celda de una columna y “suben” hasta la primer celda con datos (que sería la últma con datos de la columna, lo que yo busco). Pero no sé 2 cosas:
        1- cómo guardar esa información en una variable y
        2- cómo hacer referencia a esa variable dentro de un rango

        La ídea sería esta (aunque este código no funcione justamente debido a mis 2 dudas):
        dim ultima as integer
        Windows(“Origen.xlsx”).Activate
        Sheets(“Datos”).Select
        ultima = cells(rows.count, 2).End(xlUp).Row
        Range(cells(B2),cells(“B” & ultima)).select
        Selection.Copy
        Windows(“Template.xlsm”).Activate
        Sheets(“Pegar_Aca”).Select
        Range(“B2”).Select
        ActiveSheet.Paste

        Si pudieras corregirme ese código me harías un gran favor. Como dije:
        1- Cargar en una variable el dato de la última fila de la columna con datos
        2- Hacer referencia a esa variable dentro de un rango para el número de fila del final de rango

        Gracias!

Deja un comentario

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