Copiar datos de una lista de excel en otra hoja en función de una condición

Tengo que crear una macro que copie y pegue los datos de varias columnas y filas en otra hoja en función de una condición (hora hh:mm) La columna donde esta la fecha contiene también la hora (no se si debería estar por separado pero lo obtengo así del sitio web)

Respuesta
1

No dejas nada de referencias, por lo tanto ajusta la macro siguiendo este ejemplo y cambiando las referencias a las de tus hojas.

Necesitarás una col auxiliar (la coloqué al final) con la fórmula que hace mención a la col de la fecha-hora. Esa col auxiliar tendrá formato HORA.

Tampoco comentas cómo le indicarás el criterio... en mi ejemplo escribo la hora en C1 la que también tendrá el mismo formato HORA que la col auxiliar.

El rango filtrado se guarda en HOJA1, a partir de K2... referencias que también debes ajustar.

Sub copiaFiltrado()
'x Elsamatilde
'fin de rango según col A
x = Range("A" & Rows.Count).End(xlUp).Row
'se filtra x la col de la hora (H). El criterio se encuentra en C1
hora = Format([C1], "hh:mm:ss")
ActiveSheet.Range("$A$2:$H$" & x).AutoFilter Field:=8, Criteria1:=hora
'si hay registros filtrados se copian a Hoja1, a partir de K2
y = Range("A" & Rows.Count).End(xlUp).Row
If y > 2 Then
    Range("A3:I" & y).Copy Destination:=Sheets("Hoja1").[K2]
End If
'se quita el filtro de la hoja origen
ActiveSheet.ShowAllData
End Sub

Toda la macro va comentada para que puedas modificarla a tu necesidad.

Tienes toda la razón, no di prácticamente datos, soy aun inexperta aquí je je.

Muchas gracias por la respuesta!

He anadido la columna con la hora en el formato Time. Necesitaría que se ativase el filtro en función del criterio, en este caso 00:30:00, y se copiara toda la tabla que se genere con ese filtro a partir de K2 por ejemplo. Con el código que mencionaste no se activa ningún filtro. Desactive ActiveSheet.ShowAllData para ver por que no se copiaba nada y no había ningún filtro seleccionado, no se por que.

Por otro lado, lo que necesito realmente es que se repita el filtrado, copiado y pegado de la tabla para las 00:30:00, la 1:00:00 y así sucesivamente (periodos de media hora) y se vayan copiando las tablas una al lado de la otra, ¿existe una forma de hacer eso con un solo código? ¿O tengo que repetir lo mismo e ir cambiando el criterio para cada media hora?

Muchas gracias! Espero haber detallado mejor lo que necesito :)

He conseguido que se filtre, había cometido un error tonto al escribir. De todos modos sigo teniendo la ultima duda de como hacer que filtre sin tener que repetir el código con cada criterio (cada media hora) pero que no se superponga la tabla copiada, si no que se vayan copiando una al lado de otra.

Gracias

Te dejo el código modificado para que se copie cada rango filtrado uno al lado del otro, o sea a derecha. Ajusta nombre de hoja y primer celda del pegado según tu libro.

Sub copiaFiltrado()
'x Elsamatilde
'fin de rango según col A
X = Range("A" & Rows.Count).End(xlUp).Row
'se filtra x la col de la hora (F). El criterio se encuentra en C1
hora = Format([C1], "hh:mm:ss")
ActiveSheet.Range("$A$2:$F$" & X).AutoFilter Field:=6, Criteria1:=hora
'si hay registros filtrados se copian a Hoja1, a partir de K2
Y = Range("A" & Rows.Count).End(xlUp).Row
Set hox = Sheets("Hoja1")
If Y > 2 Then
    'se busca la primer col libre a partir de K2
    If hox.[K2] = "" Then
        colx = 11
    Else
        colx = hox.Range("K2").End(xlToRight).Column + 1
    End If
    'se copia el rango filtrado SIN incluir la col auxiliar
    Range("A3:E" & Y).Copy Destination:=hox.Cells(2, colx)
End If
'se quita el filtro de la hoja origen
ActiveSheet.ShowAllData
End Sub

Observa que ahora no estoy copiando la col auxiliar que me pareció innecesaria... lo dejo a tu criterio.

Ahora, con respecto a cómo llamar a este proceso (en intervalos de 1/2 hora o según cambios en col fecha/hora) ... deberás dejar nueva consulta aclarando cómo sabrá Excel el momento en que debe ser ejecutado . Adjunta la última imagen que dejaste aquí para que el experto que la tome comprenda de qué se trata la tarea.

Sdos!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas