Desglose de horas diurnas, nocturnas y mixtas en turnos de trabajo

Interesante problema planteado por un miembro de la comunidad que gestiona turnos de trabajo: dada una tabla con hora de entrada y hora de salida de cada empleado, necesita calcular automáticamente cuántas horas son diurnas (6:00-20:00), cuántas nocturnas (20:00-6:00) y clasificar la jornada como Diurna, Nocturna o Mixta.

El reto está en manejar turnos que cruzan la frontera diurna/nocturna (ej: entrada a las 14:00, salida a las 00:00) y turnos completamente nocturnos que cruzan medianoche (ej: 21:00 a 06:00).

Solución de John

John propuso una fórmula muy bien documentada que descompone el problema en bloques:

``
=LET(
e; C10:C12;
s; D10:D12;
x; s+(s<e);
a; SI(x<D3; x; D3) - SI(e>C3; e; C3);
b; x-C3-1;
d; a(a>0) + b(b>0);
n; x-e-d;
APILARH(d; n; SI(dn; "Mixto"; SI(n; "Nocturno"; "Diurno")))
)
`

Cada variable tiene un propósito claro:
- e/s: entrada y salida
- x: salida extendida (ajusta el cruce de medianoche sumando 1 si salida < entrada)
- a: bloque diurno A (horas diurnas del turno antes de medianoche)
- b: bloque diurno B (horas diurnas del turno después de medianoche)
- d/n: total diurno y nocturno

Solución de Leo

Leo llegó a una solución prácticamente sincronizada con John, usando MAP para manejar cada par entrada-salida individualmente:

`
=LET(
i; C3;
f; D3;
e; C10:C12;
s; D10:D12;
d; MAP(e; s; LAMBDA(a; b;
24(MAX(0; MIN(b+(b<a); f) - MAX(a; i))
+ MAX(0; MIN(b+(b<a); f+1) - MAX(a; i+1)))
));
n; 24(s-e+(s<e)) - d;
APILARH(d; n; SI.CONJUNTO(dn; "Mixto"; d; "Diurno"; n; "Nocturno"))
)
`

La clave es el uso de MAX y MIN para "recortar" cada turno a la ventana diurna, calculando la intersección entre el rango del turno y el rango diurno.

Solución de Miki

Miki propuso una versión más compacta con SI.CONJUNTO para la clasificación:

`
=LET(
e; C10:C12;
s; D10:D12;
x; s<e;
d; SI(s+x<D3; s; D3) - SI(e>D3; D3; e);
n; s-e+x-d;
APILARH(24d; 24n; SI(Y(d>0; n>0); "Mixto"; SI(d>0; "Diurno"; "Nocturno")))
)
`

Extensión con fechas (Hector)

Hector amplió todas las fórmulas para trabajar con fecha y hora en vez de solo hora. Esto permite manejar turnos de vigilancia de 24 horas (entrada día 1 a las 6:00, salida día 2 a las 6:00) donde sin fecha el cálculo daría cero. Compartió un archivo con todas las soluciones juntas y los ajustes necesarios para multiplicar por 24 y obtener horas decimales.

---

Cuatro enfoques distintos para el mismo problema, cada uno con su estilo: John descomponiendo en bloques lógicos, Leo usando MAP+LAMBDA` con intersección de rangos, Miki apostando por la compacidad, y Hector extendiendo a fechas completas.

Más contenido de Excel en InflueXcel