Como filtrar fechas, con macros de excel

Tengo una serie de proyectos en diferentes filas, que cada uno consta de 4 fases diferentes. Cada fase(una columna por cada) hay una serie de fechas que obviamente son correlativas, es decir por ejemplo : fase 1 fecha 27/01/2016, fase 2 04/03/2016.... Y así sucesivamente. Mi pregunta es como podría simplemente introduciendo un mes y año, que me salieran todos los proyectos que tengo ese mes. Por ejemplo, introduzco 03/2016, pues me salieran todas las filas de los proyectos que en alguna de sus fases hubiera 03/2016.

Hay una opción de poner fecha desde- fecha hasta pero no me funciona.

2 Respuestas

Respuesta
3

H o l a:

Si vas a filtrar 4 columnas, tenemos que realizar un ciclo para revisar cada una de las 4 columnas, no podrías utilizar un autofiltro o un filtro avanzado ya que si filtras por la primera columna, no podrás revisar los datos de las otras 3 columnas, y puede ser que en las otras columnas también existan fechas que necesitamos filtrar, tampoco podrías filtrar la columna1, copiar datos, filtrar la columna2, copiar datos, filtrar columna3, copiar datos, filtrar columna4, copiar datos, ya que podrías duplicar registros.

Pero supongo que todo lo anterior ya lo conoces, te presento una macro que revisa las 4 columnas y si la fecha está en el periodo que necesitas entonces copia la fila completa a la hoja2.

La idea es que en alguna celda, por ejemplo la celda A1, pongas la fecha, puedes poner 01/03/2015 o 03/2015, siempre y cuando sea una fecha, es decir, si pones 03/2015, pero tienes el formato de que solamente te muestre el mes/año, pero es una fecha, y si la revisas corresponde al 01 de marzo de 2015, entonces es una fecha.

Las columnas que estoy revisando son: B, C, D y E.

Sub FiltrarFecha()
'Por.Dante Amor
    Set h1 = Sheets("Hoja1")
    Set h2 = Sheets("Hoja2")
    h2.Cells.Clear
    u = h1.Range("B" & Rows.Count).End(xlUp).Row
    j = 2
    fecini = DateSerial(Year([A1]), Month([A1]), 1)
    udia = Day(DateSerial(Year([A1]), Month([A1]) + 1, 1) - 1)
    fecfin = DateSerial(Year([A1]), Month([A1]), udia)
    For i = 2 To u
        If h1.Cells(i, "B") >= fecini And h1.Cells(i, "B") <= fecfin Or _
           h1.Cells(i, "C") >= fecini And h1.Cells(i, "C") <= fecfin Or _
           h1.Cells(i, "D") >= fecini And h1.Cells(i, "D") <= fecfin Or _
           h1.Cells(i, "E") >= fecini And h1.Cells(i, "E") <= fecfin Then
            h1.Rows(i).Copy h2.Rows(j)
            j = j + 1
        End If
    Next
    MsgBox "Filtro terminado"
End Sub

F E L I Z   A Ñ O   T E   D E S E A  D a n t e   A m o r. Recuerda valorar la respuesta. G r a c i a s

Muchísimas gracias, era exactamente lo que buscaba. Lo único es que no sé si se podría modificar el código para que cuando se grabara la fila en la Hoja2 de excel, la celda donde se ha encontrado la fecha en la Hoja1 en alguna de las columnas, quedara resaltada en algún color en la Hoja2. La idea es que de un vistazo sepamos en que fase de cada proyecto nos encontramos, y por eso resaltar la fecha buscada con un formato diferente sería genial.

De todos modos, infinitas gracias por adelantado, y feliz año nuevo!

SALUDOS 

H o l a:

No entendí muy bien dónde hay que resaltar el color.

Con mucho gusto te ayudo con todas tus peticiones. Crea una nueva pregunta en el tema de microsoft excel, en el desarrollo de la pregunta escribe: "para Dante Amor" y explica con unas imágenes lo que necesitas.

Respuesta
1

Te comento que en realidad si funciona, pero el problema con las macros y las fechas es como las busca. Mi experiencia personal me volvía loco buscando formas y no daba en la tecla hasta que me di cuenta que excel, en las macros, busca las fechas con el formato YYYY/MM/DD, adapta tu código para que la fecha a buscar este en ese formato y veras que funciona de maravilla.

Cualquier cosa, avisame.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas