Copiar hojas mediante macros

Valedor
Te molesto porque hace varios días estoy tratando de crear una macro, pero
no pueda hacerlo ni con la grabadora ni
tampoco con filtros avanzado.
El tema es que tengo un planilla de excel que consta de 4 hojas las mismas tienen igual formato pero corresponden a diferentes días. Lo que intento hacer con la macro es que me copie los datos de cada una de las hojas (el rango seria el mismo) en una hoja nueva sin incluir las filas vacías.
Te agradecería de podes verlo.
Desde ya, muchas gracias y perdón por la molestia.
Mauricio Domínguez

1 respuesta

Respuesta
1
Normalmente" filas vacías NO deberían de existir en nuestros datos, es decir, conforme se captura se agregan a la siguiente fila o cuando se elimina uno, se elimina la fila sin dejarla en blanco, por fila vacía entiendo un registro que no tenga ningún campo, las filas vacías complican el código innecesariamente, procura no dejarlas, la macro que te anexo hace lo siguiente...
Agrega una hoja nueva
Selecciona la Hoja1
Selecciona el rango de datos, aquí es muy importante que selecciones, incluyendo TODOS los datos, hasta tu ultimo datos, incluyendo las filas vacías
Ordeno por el primer campo, de hecho puede ser por el que sea, la finalidad de este ordenamiento es que deja las filas vacías al final
Selecciono la región actual, de esta forma ya NO selecciona las filas vacías
Copio esta selecciona a la nueva hoja
Hago lo mismo con las restantes hojas...
Tu tarea es:
Ser mucho más explicito en tus exposiciones
Cambiar los nombres de las hojas que yo uso Hoja1, Hoja2. Etc, por los tuyos
Cambiar el rango que yo uso A1:A20 por el correcto que tu uses
Consultar la ayuda de Excel para dudas de alguna instrucción
Si no sabes incorporar esta macro a tu archivo, consultar mi página en donde explico como hacerlo...
Esta es la macro
Option Explicit
Public Sub CopiarDatos()
Dim HojaNueva As Worksheet
'Agregamos una nueva hoja
Set HojaNueva = Sheets.Add
'Seleccionamos la hoja 1
Sheets("Hoja1").Select
'Seleccionamos el rango de datos
Range("A1:C20").Select
'Ordeno por el primer campo
Selection.Sort Key1:=Range("A2"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
'Copio la región actual a la nueva hoja
Range("A1").CurrentRegion.Copy HojaNueva.Range("A1")
'Seleccionamos la hoja 2
Sheets("Hoja2").Select
'Seleccionamos el rango de datos
Range("A1:C20").Select
'Ordenamos por el primer campo
Selection.Sort Key1:=Range("A2"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
'Copiamos los datos de la fila 2 y hasta el ultimo dato y lo copiamos
'después de la ultima fila en la hoja nueva
Range(Range("A2"), Range("A2").End(xlToRight).End(xlDown)).Copy HojaNueva.Range("A1").End(xlDown).Offset(1, 0)
'En La hoja 3 y 4 es el mismo procedimiento
Sheets("Hoja3").Select
Range("A1:C20").Select
Selection.Sort Key1:=Range("A2"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
Range(Range("A2"), Range("A2").End(xlToRight).End(xlDown)).Copy HojaNueva.Range("A1").End(xlDown).Offset(1, 0)
Sheets("Hoja4").Select
Range("A1:C20").Select
Selection.Sort Key1:=Range("A2"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
Range(Range("A2"), Range("A2").End(xlToRight).End(xlDown)).Copy HojaNueva.Range("A1").End(xlDown).Offset(1, 0)
Application.CutCopyMode = False
Set HojaNueva = Nothing
End Sub
Te agradezco, realmente me sirvo.
Disculpame por no haber sido más explicito, nervios de novato. A pesar de los pocos datos me captaste el mensaje.
Nuevamente muchas gracias.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas