Macro en Excel. Copia de rango de columnas de una hoja en otra, manteniendo todo el formato y filtros

Necesito por favor crear una macro en Excel que, dada una tabla inicial en una hoja, seleccione todas las filas (y aquí me está dando un problema, porque cuando selecciono todas las filas, no me copia manteniendo el formato con "PasteEspecial") de las columnas A hasta AG y las pegue en otra hoja, dejando la tabla original intacta y manteniendo todo su formato al pegar (fondo, fuente, centrado dentro de celda...) . La tabla original posee filtros por columna. Sería ideal que pudiera mantenerlos en la hoja de destino, aunque no sé si eso es posible en Excel... Sería también genial que pudiera crear la otra hoja antes de hacer el pegado, y que sea capaz de asignarle un nombre automáticamente a la hoja de destino. Vamos, que el código contenga una orden "créame esta hoja nueva" y "dale este nombre".

Posteriormente debe ser capaz de crear los siguientes filtros:

1- Seleccionar las celdas correspondientes a una columna contigua y a la derecha de aquellas celdas de su columna contigua y a la izquierda que contengan espacios en blanco. Para explicarme, que sea capaz de leer dónde están los espacios en blanco de una columna y activar la celda contigua de la columna derecha, para pegarle su dato.

2- Que sea capaz de escoger en una columna aquellas celdas y sólo aquellas celdas que contengan fechas que cumplan que (con un IF, supongo) la fecha de su celda contigua y a su derecha (correspondiente a la columna de la derecha) contengan una fecha anterior en el tiempo a la de la columna escogida, y que esos datos y sólo esos datos sean copiados desde la columna contigua con sus datos más antiguos, a la nueva, donde los datos eran más recientes.

Los filtros son un poco lío, lo admito. Me conformaría y agradecería muchísimo que, por el momento, al menos la primera parte pudiera ser llevada adelante.

Agradezco mucho por adelantado vuestra asistencia y quedo pendiente de la colaboración en esta estupenda web (que acabo de comenzar a usar) en aquellas áreas en las que pueda ser de ayuda.

1 respuesta

Respuesta
1

Has probado con :

Pastespecial xlAll

Muchas gracias, gregori00001, pero necesitaría tener ese comando en su contexto, algo más en detalle. Apenas acabo de empezar en VB ahora y  apenas he aprendido a grabar macros y hacer botones. Muchas gracias en cualquier caso por molestarte en ayudar :-).

Esto te valdrá de guía:

Sub paste()

' Selecciono el rango A1:B3 de la Hoja1

Sheets("Hoja1").Range("A1:B3").Select

'Lo copio
Selection.Copy

'Selecciono la Hoja2
Sheets("Hoja2").Select

'Selecciono la celda A1

Range("A1").Select

'Pego el ancho de columnas
Selection.PasteSpecial paste:=xlPasteColumnWidths, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False

'Pego el resto
ActiveSheet. Paste

End Sub

Lo tendrás que adaptar a tus rangos y nombres de hojas

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas