Quisiera saber cómo hacer una macro en Excel que me permita copiar un rango de una hoja a la otra

Quisiera saber Cómo hacer una macro en Excel que me permita copiar un rango de una hoja a la otra. Pero dicho rango no quiero que esté expresada en la macro, es decir, el rango que quiero que se copie está expresado en la celda A1.
Por lo tanto la macro que quiero es una que copie el rango de la Hoja1 especificado en la celda A1 (A1:D10) y la pegue en la Hoja X.
He estado buscando una macro que me permita esto pero no logro encontrarla, No soy un experto así que agradecería explicación de paso por paso.

2 respuestas

Respuesta
2

29/07/16

Buenas, Axel

Esta es la macro que te puede ayudar:

Sub PegaRango()
HojaDest = "Hoja2"
CeldaDest = "B2"
RangoOrig = ActiveSheet.Range("A1").Value ' toma rango de lo que diga la celda A1
    Range(RangoOrig).Copy
    Sheets(HojaDest).Select
    Range(CeldaDest).Select
    ActiveSheet.Paste
End Sub

Puse un par de variables en la macro para que indiques donde pegar lo copiado.

Pero si esos datos también estuvieran indicados en las hojas, puedes usar la instrucción que carga la variable RangoOrig con la celda que corresponda.

Espeero que te sirva.

Abrazo

Fernando

(Buenos Aires, Argentina)

Gracias Fernanado por tu respuesta, funcionó perfecto!!

Hola Fejoal, estuve realizando unas pruebas con la macro y me di cuenta que al ejecutarla pega los datos, pero yo necesito que sean valores directamente, es decir que no pegue las fórmulas, solamente los valores. Gracias

Hola Fernando, estuve probando la macro y tengo una duda, se podría, al momento de pegar la información de la hoja1 a la otra hoja, que pegue los datos y sus valores? es decir, mantener los números/datos, formato pero no los valores? No sé si te lo he preguntado varias veces, pero no comprendo bien cómo funciona la página. Gracias!

.

Buenas, Axel

Para que te pegue valores y no fórmulas, reemplaza la rutina anterior por la siguiente.

Sub PegaRango()
HojaDest = "Hoja2"
CeldaDest = "B2"
RangoOrig = ActiveSheet.Range("A1").Value ' toma rango de lo que diga la celda A1
    Range(RangoOrig).Copy
    Sheets(HojaDest).Range(CeldaDest).PasteSpecial xlPasteValues
    Sheets(HojaDest).Range(CeldaDest).PasteSpecial xlFormats
    Application.CutCopyMode = False
End Sub

La segunda línea que agregué pega el formato que tenga aquel rango. Suele ser necesario.

Abrazo

Fernando

.

Sí, Axel, el sitio no está actualizando bien los mensajes.

Yo vi tu consulta en mi teléfono pero no la encontré cuando entré a contestarla.

Igual te mandé la respuesta y luego aparecieron tus dos preguntas.

Espero haberte ayudado.

Abrazo

Fernando

¡Gracias Fernando! Una joyita la macro ;) perdona por hacer dos preguntas pero no sé si te envía la pregunta personalmente o aparece al instante acá, me re sirvió!

.

Todo bien, Axel.

Ya te acostumbrarás al uso de esta página.

Normalmente, cuando colocas una pregunta o comentario suele verse al instante. Pero la semana pasada eso no estaba sucediendo, sino que tardaba horas en actualizarse.

Acá estamos para cuando lo necesites.

Abrazo

Fernando

.

Respuesta
2

Si en la celda A1 pones un rango válido, entonces puede ser así:

Sub Copiar1()
    Sheets("Hoja1").Range(Sheets("Hoja1").Range("A1")).Copy Sheets("HojaX").Range("A1")
End Sub

Pero si el rango no es válido, entonces se tiene que validar para que no te envíe error, puede ser así:

Sub CopiaRango()
'Por.Dante Amor
    Set h1 = Sheets("Hoja1")    'Hoja origen
    Set h2 = Sheets("HojaX")    'Hoja destino
    If h1.[A1] = "" Then
        MsgBox "Introduce un rango en la celda A1", vbCritical
        Exit Sub
    End If
    On Error Resume Next
    h1.Range(h1.Range("A1")).Copy h2.Range("A1")
    If Err.Number <> 0 Then
        MsgBox "Error en el rango: " & Err.Number & " " & Err.Description, vbExclamation
    Else
        MsgBox "Rango copiado"
    End If
End Sub

'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas