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

Compatibilidad: Excel 365 2021 2019 2016

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:

 

  • Ú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:

La línea de firma

 

Última fila con datos de columna

 

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

69 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!

  • buenas noches, quiero seleccionar un area de impresion
    resultado de copiar 3 hojas y ordenarlas
    necesito imprimir la linea de cuadricula pero sale muy delgada poco visible

    se me ocurrio ponerle bordes
    hice una macro pero no he podido ubicar la ultima fila y columna
    a-j cuando la ultima columna no lleva siempre contenido

    necesito seleccionar todo lo que voy a imprimir para aplicar los bordes

  • ejemplo hice una macro que copia unos datos a otro libro pero todo bien por ai, pero cuando la uso de nuevo me borra lo que puse anterior mente. si me pueden explicar como hago que la macro siempre se posicione en la celda de abajo pero que no sea creando una fila nuevo, solo que se posicione abajo

  • wow!! me encanta la manera en como lo explica y que aclare las dudas gracias por compartir tus conocimientos

  • Felicitaciones por los aportes.
    ¿Hay solución para la siguiente situación?
    IR A LA ÚLTIMA CELDA EN UNA COLUMNA) QUE NO TENGA DATOS (VACIA) CUANDO HAY VARIAS CELDAS VACIAS ENTRE LOS DATOS.
    NOTA: con una sola línea de comandos, es decir sin hacer un recorrido celda por celda.
    Ejemplo:
    A1= "Nombre"
    A2= "Edgar"
    A3= ""
    A4= "Pepe"
    A5= ""
    A6= ""
    A7= ""
    A8= "Zulma"

    El RESULTADO DEBE SER= 7

    Gracias

  • Excelentes las explicaciones, quisiera que me ayudaran como hago para copiar un rango de datos de una hoja a otra hoja pero que se pegue siempre en la primera fila vacia.
    Gracias

    • Hola Juan,

      Puedes escribir una macro como:

      Sub Copia_Rango()
      Sheets("Hoja1").Select
      Range("B2:G13").Select
      Selection.Copy
      Sheets("Hoja2").Select
      Range("B2").Select
      Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
      :=False, Transpose:=False
      Application.CutCopyMode = False
      End Sub

      Donde de Hoja1 se copia el rango B2:G13 y se pega en Hoja2, celda B2.

      Saludos.

  • Hola
    Estoy necesitando copiar solo las filas que tengan datos en otra hoja de un archivo diferente en la en la ultima fila vacia, y a medida que se ejecute siga pegando en la siguiente fila vacia

  • UN APOYO ANDO REALIZANDO UNA DONDE LOS DATOS ME LOS ARROJA EN OTRA HOJA,
    ¿QUIERO SABER COMO HACERLE PARA QUE AL FINAL DE LOS DATOS QUE GENERO, SIGA CAPTURANDO A PARTIR DE LO ULTIMO REGISTRADO?

  • Puedes explicar más detalladamente ( todo el código necesario) por favor, en el caso de una Tabla.
    Por ejemplo , cómo debo hacerlo para identificar la primera fila vacia en la columna A de la Tabla "Datos".

    Muchas gracias

  • Es la primera vez que ingreso a su página, y me ha parecido sencillo y completa a la vez, le dedican el tiempo a las personas que como yo nos gusta el excel y visual, Felicitaciones, Tengo preguntas para un formulario que quiero hacer como puedo realizarcelas.

  • Buen día,

    me podrías ayudar con un código que al oprimir un botón me traiga el ultimo dato que contenga la fila 3 despues de la celda C3 hacia la derecha y me lo ponga en un label

  • Buenos días
    Estoy elaborando una macro para introducir una serie de datos en varias hojas de calculo, pero no soy muy diestro en el tema de Visual Basic.
    Mi pregunta es: Como puedo copiar los datos como valores?, en la siguiente formulación:
    "Sheets ("Hoja1").Range("S6:S32").Copy Destination:=Sheets("Hoja2").Range("H5").End(xlRignt).Offset(0,1)"
    Este procedimiento me cumple con lo que necesito pero me copia los datos como formula y yo necesito que sean valores.
    Como la corrijo?
    Gracias por su colaboración

    • Hola Carlos,

      Por ejemplo: Pega en G5

      Selection.Copy
      Range("G55").Select
      Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
      ActiveSheet.Paste
      Application.CutCopyMode = False

      Saludos

  • Hola buenas noches: una consulta, necesito si me podrian ayudar en lo siguiente:
    Tengo una planilla de alumno donde las columnas Nota 1, 2 y 3 estan vacias para cargar las notas ejecuto un UserForm1 donde hay un Listbox que me carga los datos como DNI, Apellido y Nombre del alumno hasta aqui todo bien pero necesito que al seleccionar un alumno y precionar un boton llamado cargar se abra otro UserForm2 con los datos del alumno y en un textbox poner la nota y este se cargue en la columna de Nota 1 del alumno seleccionado, desde ya gracias

  • Hola buen día,

    Se que esta pregunta es mucho mas compleja y quizás no corresponda a este tema, pero es posible definir un rango de celdas teniendo en cuenta la primera y ultima celda de una tabla, independiente de su tamaño?, es para copiar la información que se genera a partir de una tabla dinámica como un rango a otra ubicacion.

    Mil Gracias :).

    • Hola AndresGT,

      Si lo que deseas es identificar la primera y la última celda la única opción es por macros.
      Si deseas todo el rango desde la primera hasta la última fila puedes trabajar con el nombre de la tabla.

      Saludos.

  • Buen día gente, buen año para todos.

    Quiero copiar todo un rango de la última columna con datos hacia la derecha, y luego pegarlo en otro rango. Pero solo me copia la primer celda de esa última columna. Me podrían ayudar? por favor.

    Sheets("Histórico Semanal").Select

    Range("B2:B26").End(xlToRight).Select

    Selection.Copy

    Sheets("Planilla Stock").Select
    Range("B2:B26").Select

    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False

    Saludos, Franco

  • Hola, y gracias por este post, aquí he podido ver como encontrar la ultima celda sin datos de una fila, pero tengo un problema a la hora de recorre esa fila, tengo creado este codigo

    ultimaCelda = Sheets("Hoja1").Range("E9").End(xlToRight).Column

    For i = 9 To ultimaCelda
    Range("E" & i) = Replace(Range("E" & i), "L", "P")
    Next i

    Esto lo que me hace es añadir una celda mas en la columna E, y lo que necesito es que en lugar de ir en vertical ese conteo que se mueva en horizontal, aumentado las columnas, para reemplazar el texto "L" que tiene la celda por un "P"
    No se si se podra mostar esta imagen
    [IMG]https://funkyimg.com/i/31Eqn.png[/IMG]

    como puedo conseguir que avance en horizontal es conteo?

    Gracias.

  • Hola buenos días como están.
    Por favor a ver si me pueden ayudar con código que no logro el resultado deseado.
    Necesito copiar de A5 a K5 y pegarlo en la columa A de la primera fila vacía hacia abajo y luego que la copie borrar el contenido de A,B,C,D,E,F,G,H,J, las columnas I y K son formulas y deben mantenerse. La celda activa debe quedar en la columna A. Les envio el codigo. Lo que me falta es borrar el contenido:
    Sub InsertarEquipo()
    Application.ScreenUpdating = False
    Range("A5:K5").Select
    Selection.Copy
    With ActiveSheet.Range("a" & Rows.Count).End(xlUp).Offset(1)
    .PasteSpecial Paste:=xlPasteValues
    .PasteSpecial Paste:=xlPasteFormats
    Application.CutCopyMode = False
    ActiveSheet.Range("a" & Rows.Count).End(xlUp).Select
    End With
    MsgBox "¡ Operación realizada satisfactoriamente !"
    End Sub

    Muchas Gracias!!

  • Hola TC gracias por la pronta respuesta.
    El código que me envías no funcionaría pues tiene rangos definidos. Te explico.
    El rango A5:K5 va a ser siempre el rango base. A partir de la linea 6 necesito ir copiando esta linea según las necesidades del caso. Pudiera llegar en el tiempo a la fila 500. La idea es copiar a través de un botón este rango y solo dejarle las formulas para ingresar información en las celdas que se van a borrar. Por eso debe el código siempre copia en la primera fila vacía y el rango que se debe borrar es el de esa fila que se acaba de copiar y que se va a ir moviendo siempre hacia abajo.
    Espero haberte aclarado mas la necesidad.
    Agradecido de antemano, le saluda

  • Hola, excelente la explcacion. Pero se me genera un problema con la macro para la primer celda vacia de una columna. Yo no quiero que mi rango comience en A1, pero cuando cambio el rango por ejemplo de A1 a D5 no me lee la macro.

    Espero me puedas ayudar.

    Saludos

  • Para ir a la primera de las ultimas celdas vacías de una columna con celdas intermedias vacías, hay un código que evita tener que recorrer toda la columna con una macro:

    FilaVacia = Cells(65536, ColumnaEntrada).End(xlUp).Row

    o similar usando offset ...

    Saludos

  • BUENAS TARDES.
    SUCEDE QUE COPIE LA SINTAXIS, PERO...
    CUANDO INGRESO EN EL USERFORM UN "NUMERO" POR EJEMPLO DE 2 CIFRAS, ME SURGE UN INCONVENIENTE.
    EL PRIMER NUMERO LO COLOCA EN LA CELDA VACIA, POR DEBAJO DE LA ULTIMA, PERO EL SIGUIENTE NUMERO TAMBIEN LO COLOCA POR DEBAJO Y ME LO FRACCIONA.
    AL BORRANDO DE A UNO, ME SIGUE AGREGANDO CELDAS EN LA COLUMNA.
    PUEDE ESTA MAL LA SINTAXIS UTILIZADA?

    Private Sub TextBox13_Change()
    Value = TextBox13
    Worksheets("CARATULA2020").Range("D11") = Value
    Worksheets("PERICIAS2020").Select
    Range("D1").End(xlDown).Offset(0, 0).Value = TextBox1

  • Alguien que me pueda ayudar por favor.

    Me gustaría aplicar bodes de forma automática en una hoja de reporte, que prácticamente sombree todo lo que tengo de datos y se apliquen los bordes.

    quizás algunos de los ejemplos anteriores con algo complementado pueda realizar lo que me gustaría hacer,pero carezco de conocimiento para realizar una hazaña de estas.

    Agradezco mucho la ayuda de todos.

    • Hola David,

      Puedes insertar el código siguiente:

      Sub formato_rango()

      ActiveSheet.Range("A1", ActiveSheet.Range("d" & ActiveSheet.Rows.Count).End(xlUp)).Select

      Selection.Borders.LineStyle = xlContinuous

      Selection.Interior.Color = RGB(230, 230, 230)

      End Sub

      Aplica linea continua en las celdas y el color con el valor RGB deseado.

      Saludos.

  • hola alguien me podría ayudar me dejaron diseñar un programa que tenga datos en la hoja 1 de Excel, tal vez unos 10 y a partir de ahí recorrer una fila de celdas a partir de A1 hasta encontrar una vacía y dejarla a esta como celda activa para que la entrada de datos comience a partir de ella una vez cerrado y vuelto a abrir el programa, realizar el anterior programa creando un autoejecutable que no muestre la página de Excel pero si guarde los datos, Solo se puede mostrar las ventanas de visual BASIC.
    siento que es similar al que se esta explicando en esta pagina web

  • me podrias ayudar con algo estoy realizando una funcion para que una serie de datos se copien y se peguen en unas celdas en otra hoja de calculo, pero necesito hacer que dichos datos se peguen despues de cada celda escrita o sea abajo de cada vez que copie lo estoy haciendo atravez de macros pero no he podido dar con la funcion exacta me podrias ayudar estoy utilizando de esta manera
    Sub GUARDAR()

    If Range("E7").Value = Empty Or Range("E10").Value = Empty Or Range("E13").Value = Empty Then
    MsgBox ("Datos Basios")
    Exit Sub
    End If

    Sheets("PRODUCTO").Select
    ultimafila = Cells(Rows.Count, 1).End(xlUp).Row
    Cells(ultimafila, 1).Offset(1, 0).Select
    Range("A7").EntireRow.Insert
    Sheets("REGISTRO").Select

    Range("E7").Copy
    Sheets("PRODUCTO").Select
    Range("B7").PasteSpecial xlPasteValues
    Sheets("REGISTRO").Select

    Range("E10").Copy
    Sheets("PRODUCTO").Select
    Range("C7").PasteSpecial xlPasteValues
    Sheets("REGISTRO").Select

    Range("E13").Copy
    Sheets("PRODUCTO").Select
    Range("D7").PasteSpecial xlPasteValues
    Sheets("REGISTRO").Select

    End Sub
    pero me sigue pegando en la primera fila y no me sirve me puedas ayudar porfavor agradeceria cualquier consejo

    • Hola Luis,

      Adapta el código:
      Sub exporta()

      Dim fila1 As Long
      Dim fila2 As Long

      Sheets("Hoja3").Activate
      fila1 = Range("A" & Rows.Count).End(xlUp).Row
      Range("A2:G" & fila1).Copy

      Sheets("Hoja3").Activate
      fila2 = Range("A" & Rows.Count).End(xlUp).Row

      Range("A" & fila2 + 1).PasteSpecial Paste:=xlPasteAllUsingSourceTheme, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
      Application.CutCopyMode = False
      Range("A" & fila2).Select
      End Sub

      Saludos.

  • que genios, muy agradecido por la dedicación que le han dado a las explicaciones y pese que ya han pasado 4 años, sigue muy vigente.
    amigos, tengo algunas dudas si me pueden ayudar, les estaré muy agradecido.
    Tengo un libro "XX", donde tengo que copiar rangos de celdas, de acuerdo al encabezado de una celda y pegarlo en otra hoja pero del libro "YY" incrementalmente, por ejemplo:
    "la Celda A1 dice: "Alumnos 1 Basico" y si dice "Alumnos 1 Basico", tengo que copiar inmediatamente las celdas desde A2 hasta la A7 en vertical y en la columna H2 hasta H7 en horizontal" el problema es que mes a mes tengo que hacer esto, pero no siempre llegan hasta la fila A7, a veces llegan hasta la A30, A15, A59, ...An°, así que ponerles rangos cerrados no me sirven. Pude hacer algo según lo que dice en sus primeros ejercicios "ActiveSheet.Range("A1").End(xlDown).Select" y luego hasta la columna final (H1:H7) "Range("A1").End(xlToRight).Select" y luego copiarlos con Selectio.Copy y pegarlo en la hoja, pero de manera rustica, ya que si los datos estan fuera de rango del libro "XX" no los copiará y otra complicación es que me sobrescribirá lo que pegue en el libro "YY", así que tengo que colocar una declaración de dos Sentencias ("Dim Leer_Fila_Vacía" y "Dim Pegar_contenido_nuevo) y un "Set" para determinar la "fila vacia" y pegar con in "With", sin sobreescribir lo que ya tengo en el libro "YY" desde el mes pasado, el contenido copiado desde el libro "XX".
    A continuación, en el libro "XX" debe seguir leyendo y si encuentra la palabra "Profesores" debe copiar el contenido inmediatamente debajo de él y pegarlo en otra hoja del libro "YY", al igual que la explicación anterior.
    y así con 4 sentencias más, es el mismo proceso.
    tengo la idea en mi cabeza, con las sentencias IF THEN y ELSE.
    pero de verdad me ha costado poder dar el tino con esta tarea.
    porque la otra incomodidad es que donde se encuentran los títulos son celdas combinadas y ufff, un suplicio.
    espero que puedan ayudarme.
    gracias.

Deja una respuesta

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

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.