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
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.