Extraer un registro considerando horas

Agradeceré tu apoyo en construir una macro para excel con el que pueda obtener un solo registro de varios trabajadores que tienen entradas diferentes.

Ejemplo; el trabajador "A" el día lunes Ingresó de la siguiente forma:

Trabajador-HIngreso--------Refrigerio.S----Refrigerio.E----------HSalida

A--------------5:20am----------12:00pm----------15:00pm-------------17:00 pm

A--------------7:10am----------13:00pm----------14:00pm------------18:00 pm

A--------------8:30am----------13:00pm----------14:00pm-------------1:20 am

El resultado debe ser:

A--------------5:30am----------13:00pm---------15:00pm-------------1:20 am

En la columna HINgreso y Refrigerio.S, se debe evaluar la hora más temprana de ingreso, y en las columnas Refrigerio. E y HSalida se debe evaluar la hora más tardía.

Puedo enviarte un archivo en excel para mayor compresión y la estructura.

1 respuesta

Respuesta
1

Este el resultado de la macro

y esta es la macro, solo cambia el b2 y el b3 por las celdas donde tengas tu información

Sub calcular_horas()
Dim unicos As New Collection
Set funcion = WorksheetFunction
With Range("b2").CurrentRegion
    filas = .Rows.Count:    columnas = .Columns.Count
End With
Set datos = Range("b3").Resize(filas - 1, columnas)
With datos
    For i = 1 To filas - 1
        trabajador = .Cells(i, 1)
        On Error Resume Next
        unicos.Add trabajador, CStr(trabajador)
        On Error GoTo 0
    Next i
    Set empleado = .Rows(filas + 3).Resize(unicos.Count, columnas)
    matriz = empleado
    For j = 1 To unicos.Count
        trabajador = unicos.Item(j)
        cuenta = funcion.CountIf(.Columns(1), trabajador)
        fila = funcion.Match(trabajador, .Columns(1), 0)
        Set empl = .Rows(fila).Resize(cuenta)
        matriz(j, 1) = trabajador
        matriz(j, 2) = funcion.Min(empl.Columns(2))
        matriz(j, 3) = funcion.Max(empl.Columns(3))
        matriz(j, 4) = funcion.Max(empl.Columns(4))
        matriz(j, 5) = empl.Cells(cuenta, 5)
    Next j
    Range(empleado.Address) = matriz
    empleado.NumberFormat = "hh:mm:ss"
End With
End Sub

James bond,

Cometí un error al no darte como tengo la estructura en mi excel, me disculpo.

¿Me puedes dar tu correo para adjuntar mi archivo excel y te ilustre mejor?

Publica tu email para solicitarte tu archivo

Como es eso?

este es mi email: [email protected]

James

te pase el archivo a tu correo.

Te envíe la respuesta esta mañana con la solución

Estimado James,

He revisado el resultado y encontré error, en la "hora de salida de refirigerio" y la "hora de retorno de refrigerio", la evaluación que has considerado en el programa para estas columnas es al inverso. Para la "hora de salida de refirigerio" es la más tardía, y para la "hora de retorno de refrigerio" es la más temprana. (Revisa el adjunto que te envié).

Por ultimo, el trabajador Araujo que tiene la hora de salida 1:20 es porque laboró hasta el día siguiente y esa debería ser la respuesta correcta.

Te adjunto el archivo.

Máximop.

James,

Por favor, te envié un correo, revísalo.

Ya te envíe la respuesta

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas