Macro copiar y pegar rango Dinámico

Espero puedan colaborarme y sea algo sencillo para no molestar mucho...

¿Hay posibilidad de una macro que copie y pegue datos de una columna a otra pero solo 45 celdas hacia arriba de la celda activa?

Ejemplo:

Si estoy activo en la fila 80 de cualquier columna y de cualquier hoja, y quiero que copie los últimos 45 datos de la columna DE, de la "hoja1", en este caso los datos del rango D36:D80, y los pegue en el mismo orden en la columna A de la "hoja2" en el rango A36:A80.

Ahora por poner otro ejemplo: si estoy activo en la fila 100 de cualquier columna y de cualquier hoja, y quiero que copie los últimos 45 datos de la columna D, de la "hoja1", en este caso los datos del rango D56:D100, y los pegue en el mismo orden en la columna A de la "hoja2" en el rango A56:A100.

Fíjense que el rango siempre son los últimos 45 datos de acuerdo a la fila activa..

Quedo atento a cualquier duda que pueda suministrar.. Mil gracias.. Bendiciones...

Respuesta
1

Siempre es importante mencionar si quieres copiar y pegar todo (fórmulas, valores, formatos, etc)

O simplemente quieres pegar valores.

Opción 1, Copiar y pegar todo:

Sub copiar_celdas1()
  ActiveCell.Offset(-44).Resize(45).Copy Sheets("Hoja2").Range("A" & ActiveCell.Offset(-44).Row)
End Sub


Opción 2, Copiar y pegar valores:

Sub copiar_celdas()
  If ActiveCell.Row < 45 Then
    MsgBox "Selecciona una celda de fila mayor o igual a 45"
    Exit Sub
  End If
  ActiveCell. Offset(-44). Resize(45). Copy
  Sheets("Hoja2").Range("A" & ActiveCell. Offset(-44). Row). PasteSpecial xlPasteValues
End Sub

Si estoy activo en la fila 80 de cualquier columna y de cualquier hoja, y quiero que copie los últimos 45 datos de la columna D, de la "hoja1", en este caso los datos del rango D36:D80

Gracias Dante.. con la segunda de los solo valores esta bien..  pero veo que la macro esta copiando los datos en la columna y  hoja donde estoy activo. y en la pregunta dije que quiero aclararle a la macro la columna y la hoja a copiar, porque estos datos estan en otra hoja..   

hay posibilidad de que la macro al pegar los valores este quede activa en la ultima celda? y no todo el rango seleccionado?  osea si pego los valores en el rango A36:A80 quede activo solo en la celda A80 y no sombreado todo el rango..  

gracias amigo... bendiciones

De hecho como funciona la primera esta también super.. solo que no se como indicarle a esta línea

ActiveCell.Offset(-44).Resize(45).Copy

la hoja y la columna.. :/

¿Siempre copia de la hoja1 y pega en la hoja2?

¿Siempre copia la columna D?

Revisé nuevamente tu petición original y en ningún momento dice: "y en la pregunta dije que quiero aclararle a la macro la columna y la hoja a copiar"

Tampoco entiendo a qué te refieres con eso.., puedes aclararlo.

A qué te refieres con "indicarle la hoja y la columna"

Tus 2 ejemplos es copiar de la columna D de la hoja1 y pegar en la columna A de la hoja2.

Si revisas, necesitas de 3 valores para copiar:

Fila, columna y hoja (origen)

Y 3 valores para pegar

Fila, columna y hoja (destino)

Partiendo de eso, puedes describir en el enunciado qué copiar y en dónde pegar.

Hoja(fila, columna) a copiar

Hoja(fila, columna) a pegar.

Así de simple.

Ahora por poner otro ejemplo: si estoy activo en la fila 100 de cualquier columna y de cualquier hoja, y quiero que copie los últimos 45 datos de la columna DE, de la "hoja1", en este caso los datos del rango D56:D100, y los pegue en el mismo orden en la columna A de la "hoja2" en el rango A56:A100.

Si dante, aquí digo que no importa la hoja que este,, deseo indicarle a la macro la hoja y la columna a copiar.. no siempre es en la columna DE por eso me gustaría indicarle a la macro que columna copiar.

Sub copiar_celdas1()
  ActiveCell.Offset(-44).Resize(45).Copy Sheets("Hoja2").Range("A" & ActiveCell.Offset(-44).Row)
End Sub

en definitivas... me gusta mucho como funciona esta macro, porque copia y pega y no se mueve para nada de la celda donde esta activa y tampoco deja seleccionado el rango de donde copia..  lo unico es que me gustaria indicarle la hoja y columna de donde copiar..  ya que si se le puede indicar hoja y rango a donde pegar.. 

Espero hacerme entender.. de verdad mil disculpas siento que te coloco a voltear con mis macros...

columna D. el corector me lo convierte a DE

Deseo indicarle a la macro la hoja y la columna a copiar.

Pero en tu petición original no dice eso.

No entiendo a qué te refieres con "indicarle"


Tu petición, dice: "Si estoy activo en la fila 80 de cualquier columna y de cualquier hoja"

Pero después agregas esto:

"deseo indicarle a la macro la hoja y la columna a copiar."


Empiezas con una petición y luego otra petición,

Entonces no entiendo.


Esto es nuevo:

Lo unico es que me gustaria indicarle la hoja y columna de donde copiar.. ya que si se le puede indicar hoja y rango a donde pegar..

Revisa bien tu petición original.


Debes tener cuidado con lo que escribes...

Re_cuerda, estás pidiendo ayuda, debes proporcionar la información detallada, aunque para ti parezca obvio.


Prueba el siguiente código.

En el primer inputbox escribe la letra de la columna donde quieres pegar.

En el segundo inputbox escribe el nombre de la hoja donde quieres pegar.

Sub copiar_celdas1()
  Dim col As Variant
  Dim hoja As Variant
  Dim celda As String
  celda = ActiveCell.Address
  col = Application.InputBox("Columna Destino")
  hoja = Application.InputBox("Hoja Destino")
  ActiveCell. Offset(-44). Resize(45). Copy Sheets(hoja).Range(col & ActiveCell. Offset(-44). Row)
  Range(celda).Select
End Sub

Vamos desde el principio.

Hoja(fila, columna) a copiar

Hoja(fila, columna) a pegar.

Así de simple.

Creo que ya entendí (más o menos) qué quieres.

Prueba esta macro:

Sub copiar_celdas2()
  Dim col As Variant
  Dim hoja As Variant
  Dim celda As String
  Dim fila As Long
  celda = ActiveCell.Address
  col = Application.InputBox("Columna origen")
  hoja = Application.InputBox("Hoja origen")
  fila = ActiveCell.Row
  Sheets(hoja).Range(col & fila).Offset(-44).Resize(45).Copy ActiveCell.Offset(-44)
End Sub

En el primer inputbox escribe la columna origen

En el segundo inputbox escribe el nombre de la hoja


Con eso estás indicando la columna y la hoja origen,

El destino será la celda activa (menos 45 filas).


[No olvides valorar.

jajaj exactamente eso era lo que trataba de decirte la macro funciona exactamente como quiero..

Una ultima petición muy importante.. ¿hay posibilidad de en vez de colocarlo en InputBox lo pueda colocar manualmente en la macro? ¿Ejemplo en columna "D" y en la hoja "Hoja2"? ¿Y ya quede así guardada desde la macro y no me tire ese cuadro?

¿Hay posibilidad de en vez de colocarlo en InputBox lo pueda colocar manualmente en la macro? ¿Ejemplo en columna "D" y en la hoja "Hoja2"? ¿Y ya quede así guardada desde la macro y no me tire ese cuadro?

Eso no está en tu petición original. Valora la respuesta para continuar...

Utiliza lo siguiente:

Sub copiar_celdas2()
  Dim col As Variant
  Dim hoja As Variant
  Dim fila As Long
  col = "D"
  hoja = "Hoja2"
  fila = ActiveCell.Row
  Sheets(hoja).Range(col & fila).Offset(-44).Resize(45).Copy ActiveCell.Offset(-44)
End Sub

¡Gracias! le faltaba el renglon de celda = ActiveCell.Address de la anterior y funciono perfectamente....  mil y mil gracias... bendiociones.... !!!!!

Sub copiar_celdas20()
  Dim col As Variant
  Dim hoja As Variant
  Dim celda As String
  Dim fila As Long
  celda = ActiveCell.Address
  col = "D"
  hoja = "Hoja2"
  fila = ActiveCell.Row
  Sheets(hoja).Range(col & fila).Offset(-44).Resize(45).Copy ActiveCell.Offset(-44)
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas