Macro calcular movimientos entre fechas

Para Dante

Hola Dante, tengo un problema con un código para imputar movimientos entre fechas. Tengo dos hojas Excel, una donde tengo los conductores de unos coches y otra donde tengo el repostaje de combustible.

Hasta la fecha esto lo tengo que hacer a mano, y estoy intentando hacerlo con una macro pero encuentro dificultades para comparar las fechas.

En esta hoja "Conductores" tengo quien lleva el coche,

Y en esta otra hoja los consumos con el día que lo han realizado.

Lo que necesito es que en la columna conductor me busque quien ha hecho el consumo teniendo en cuenta que un mismo coche lo han conducido varios conductores pero en distintos días y hora. Ahora lo hago a mano y son casi mil registros. No he conseguido hasta la fecha hacerlo de manera automática. No se si con auto-filtros en una macro podría sacar los datos. Te agradezco en gran manera si pudieras echarme una mano.

Moisés.

PD: Te envío el fichero de ejemplo por mail por si te es de más ayuda.

1 Respuesta

Respuesta
3

Te anexo la macro

Sub Buscar_Conductor()
'
'   Por.Dante Amor
'
    Set h1 = Sheets("CalculoOTSolred")
    Set h2 = Sheets("Conductores")
    h1.Range("J2:J" & Rows.Count).ClearContents
    '
    Set r = h2.Columns("A") 'columna de matriculas
    For i = 2 To h1.Range("E" & Rows.Count).End(xlUp).Row   'para cada matricula
        Set b = r.Find(h1.Cells(i, "E"), LookAt:=xlWhole)
        If Not b Is Nothing Then
            celda = b.Address
            Do
                'detalle
                fec_op = h1.Cells(i, "F")
                hor_op = h1.Cells(i, "G")
                fec_ent = h2.Cells(b.Row, "C")
                hor_ent = h2.Cells(b.Row, "D")
                If h2.Cells(b.Row, "E") = "" Then
                    fec_dev = Date
                    hor_dev = Time
                Else
                    fec_dev = h2.Cells(b.Row, "E")
                    hor_dev = h2.Cells(b.Row, "F")
                End If
                If fec_ent + hor_ent <= fec_op + hor_op And _
                   fec_dev + hor_dev >= fec_op + hor_op Then
                   h1.Cells(i, "J") = h2.Cells(b.Row, "B")
                   Exit Do
                End If
                Set b = r.FindNext(b)
            Loop While Not b Is Nothing And b.Address <> celda
        End If
    Next
    MsgBox "Fin"
    '
End Sub

.

'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

.

Avísame cualquier duda

.

Dante, simplemente magnífico.

Haces que parezca fácil. Se aprende mucho contigo.

Me he quedado con un detalle que a mi no se me había ocurrido antes y que me daba muchos problemas. Cuando la fecha está en blanco simplemente le asignas la fecha de ahora y así ya tienes con qué comparar. Eso de comparar con una celda en blanco me da problemas y así queda solucionado.

If h2.Cells(b.Row, "E") = "" Then
                    fec_dev = Date
                    hor_dev = Time

Muchísimas gracias.

Moisés.

Supuse que si la fecha de de devolución estaba en blanco, significaba que todavía no lo ha devuelto, entonces hasta el día de hoy (fecha actual) sigue en posesión del mismo conductor; por eso llené la fecha de devolución con el día de hoy. Pues conforme voy programando voy resolviendo cada situación. Sal u dos

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas