Copiar un rango de celdas mediante macro

Que tal Fernando!
A ver si me puedes ayudar con esto, ya que estoy un poco espeso.
Te pongo el ejemplo:
Libro: Libro1
A1: dato (por ejemplo 10)
A2: formula= Hoja2!A1
A3: Formula= A1+A2
Lo que quiero es copiar el Rango A1:A3 a otro libro (libro2 por ejemplo) y a la celda A5 (por ejemplo), pero de forma que las celdas del libro1 copiadas se me copien: A1 como dato, A2 como dato y A3 como fórmula, y todo esto de una sola vez y no hacerlo exclusivo para este ejemplo, es decir, que todas aquellas celdas que tengan referencia a otra hoja (codificador !) Me las copie como datos, y se mantengan el resto de fórmulas de la hoja.
Agradecería enormemente tu ayuda
Un abrazo
Nacho

1 respuesta

1
Respuesta de
Que tal, Nacho!
Sin lugar a dudas esto sólo puede pensarse en un entorno de VBA. Sin embargo, la condición de que sirva para cualquier situación puede admitir muchas variantes.
En principio pensaría en dos pasadas: Una que pegue todo como valor y la siguiente que restablezca las fórmulas en aquellas que no referencien otra hoja. Pero para que este copiado de fórmulas funcione correctamente, deberás ser sumamente cuidadoso en el uso de las referencias relativas y absolutas de tales fórmulas.
De cualquier forma no será sencillo.
Sigue una macro que, en principio, resuelve tu problema. Pega la siguiente en un modulo nuevo:
Sub pastesel()
Dim MyArea As Range
Dim V_Book0, V_Book, V_Sheet, V_Cell As String
Dim countlines As Single
Set MyArea = Range(Selection.Address)
countlines = 0
V_Book0 = ThisWorkbook.Name
V_Book = InputBox("Ingrese Nombre del libro", "LIBRO?")
V_Sheet = InputBox("Ingrese Nombre de la hoja", "HOJA?")
V_Cell = InputBox("Ingrese celda inicial para el pegado", "CELDA?")
If Right(V_Book, 4) <> ".xls" Then V_Book = V_Book & ".xls"
MyArea.Copy
Windows(V_Book).Activate
Sheets(V_Sheet).Select
Range(V_Cell).Select
ActiveCell.PasteSpecial xlPasteValues
Windows(V_Book0).Activate
MyArea.Select
For Each cell In MyArea
If InStr(1, ActiveCell.Formula, "=") > 0 Then
If InStr(1, ActiveCell.Formula, "!") = 0 Then
ActiveCell.Copy
Windows(V_Book).Activate
Sheets(V_Sheet).Select
Range(V_Cell).Offset(countlines).Select
ActiveSheet.Paste
Windows(V_Book0).Activate
End If
End If
countlines = countlines + 1
ActiveCell.Offset(1).Select
Next
End Sub
---
Primero asegúrate de que el libro de destino también esté abierto junto con el que tiene la macro y los datos a transferir.
Selecciona el área a copiar, de una columna de ancho, y dispará la macro "pastesel"
Verás una rutina primitiva que te solicitará el nombre del libro, hoja y celda (inicial) de destino, uno por vez. Fue la forma más rápida para probar el macro aunque de hecho existen fromas más sofisticadas de resolverlo.
Funcionó para las pruebas que le hice.
Intentalo y comentame.
Un abrazo!
Fernando
Añade un comentario a esta respuesta
Añade tu respuesta
Haz clic para o
Escribe tu mensaje