El contrato dice cinco días laborables. El informe que lo demuestra tiene cuatro columnas: la fecha en que se registró un ticket, la fecha en que se resolvió, un recuento de días laborables entre ambas y un veredicto. El recuento salía de =DIAS.LAB(B2;C2), que lleva en el archivo desde que se firmó el contrato, y el veredicto de =SI(D2<=5;"Cumple";"Incumple").
Para agosto de 2026 ese informe imprimió 31 incumplimientos sobre 145 tickets — el 21,38% — contra un techo contractual del 10%. Al 7,5% de una cuota mensual de 48.000 £, la penalización salió a 3.600 £, y la cuenta entró en una revisión formal con una llamada semanal enganchada.
Catorce de esos 31 tickets se resolvieron dentro de los cinco días laborables.
| Informado | Real | |
|---|---|---|
| Tickets que incumplen el acuerdo | 31 | 20 |
| Tasa de incumplimiento sobre 145 tickets | 21,38% | 13,79% |
| Tramo de penalización | 7,5% | 2,5% |
| Penalización pagada sobre 48.000 £ | 3.600 £ | 1.200 £ |
| Pagado de más | 2.400 £ | |
| Tickets abiertos fuera de plazo informados como Cumple | 3 |
Había dos cosas mal en el recuento y una cosa mal en el veredicto, y ninguna de las tres produjo un valor de error en ninguna parte de la hoja.
DIAS.LAB cuenta días laborables, incluyendo las dos fechas que le pasas — no el hueco entre ellas. Un ticket registrado un lunes y resuelto el lunes siguiente ha tardado cinco días laborables y DIAS.LAB devuelve 6. Nueve tickets estaban justo en la raya y todos ellos se imprimieron como incumplimiento.
El argumento de festivos no se pasó nunca, así que el lunes 31 de agosto — festivo en el Reino Unido, un día en el que no había nadie trabajando y no se podía tocar un ticket — contó como día laborable para todos los tickets abiertos a caballo de esa fecha. Otros cinco tickets pasaron de 5 a 6.
Y tres tickets no se habían resuelto en absoluto. Su celda de resolución estaba vacía, DIAS.LAB leyó una celda vacía como cero, cero es el 0 de enero de 1900, y la función contó obedientemente hacia atrás desde agosto de 2026 hasta el principio de la era: −33.032, −33.033 y −33.039. Todos y cada uno son menores o iguales que 5. Los tres tickets que llevaban abiertos 14, 13 y 7 días laborables — los únicos tres del mes que nadie podía defender — imprimieron Cumple, y nada los escaló, porque un informe que dice que un ticket cumplió su plazo es un informe que dice que el ticket está terminado.
Qué cubre esto.
DIAS.LAByDIA.LABestán en todas las versiones de Excel, en Windows, Mac y web.DIAS.LAB.INTLyDIA.LAB.INTL, que admiten un argumento de fin de semana, llegaron en Excel 2010 y están en todas partes hoy.LETnecesita Excel 2021, 365 o web; todas las fórmulas de aquí se dan también sin él.HOYes volátil y recalcula con cada edición, lo cual importa en la sección 10. El ejemplo es un servicio de soporte porque un acuerdo de nivel de servicio es el informe donde esto sobrevive más tiempo: el número es pequeño, se recalcula cada mes y nadie lo rehace a mano.
1) Ocho Tickets, Cinco Veredictos Equivocados, Ningún Valor de Error
Estas son ocho de las 145 filas, con lo que contó el informe al lado de lo que realmente se trabajó.
Ocho Tickets, Cinco Veredictos Equivocados y Ni Un Solo Valor de Error en la Hoja
Ocho de los 145 tickets registrados en agosto de 2026, tal y como los imprimió el informe el martes 1 de septiembre. El acuerdo es de cinco días laborables. La columna D es =DIAS.LAB(B;C) sin argumento de festivos — lo que contó el informe. La columna E son los días laborables realmente tardados, contando el festivo del lunes 31 de agosto como el día no laborable que era. INC-4418 e INC-4423 son el desfase de uno a secas; INC-4441 e INC-4437 son el desfase más el festivo que falta; INC-4460 es un incumplimiento real; y las dos últimas filas son tickets que no se resolvieron nunca, donde una fecha final vacía se lee como el 0 de enero de 1900 y el recuento corre hacia atrás hasta el origen. Todas las cifras de este artículo salen de estas ocho filas y del mes de 145 tickets del que se sacaron.
fxLas celdas con fórmulas están resaltadas en verde
Pasa el mouse sobre las celdas con fórmulas para ver la fórmula y resaltar las celdas referenciadas
Lee las dos últimas columnas una contra la otra. INC-4402, abierto y cerrado en una tarde, sale como que tardó un día — inofensivo aquí, y exactamente el mismo desfase de uno que volteó las tres filas siguientes. INC-4418 e INC-4423 son el caso limpio de lunes a lunes: cinco días laborables trabajados, seis contados. INC-4441 e INC-4437 son cinco días trabajados y siete contados, porque estaban abiertos a caballo del 31 de agosto y el recuento incluyó el festivo y además sumó su propio día extra. INC-4460 es un incumplimiento real, correctamente marcado, y es la única fila de esta tabla donde el informe y la verdad coinciden por el motivo correcto. Las dos últimas filas son los tickets abiertos, imprimiendo un número negativo de cinco cifras en una columna titulada Días laborables, y pasando el filtro.
No hay nada en rojo en la hoja. No hay ningún #¡VALOR!, ningún #¡NUM!, ningún hueco en la columna de veredicto. Todos los recuentos son enteros, casi todos son verosímiles, y los dos que no lo son están en una columna que nadie lee una vez que existe la columna de veredicto.
🎯 Escenario: Abre cualquier archivo que calcule antigüedades — tickets, facturas, siniestros, aprobaciones — y busca la celda que cuenta los días. Si es un =DIAS.LAB(inicio;fin) pelado, con dos argumentos y sin un tercero, tienes los dos fallos de este informe, y la única pregunta que queda es si algo en tus datos ha caído alguna vez justo en el límite.
2) DIAS.LAB Cuenta Días, No el Hueco Entre Ellos
=DIAS.LAB(inicio; fin; [festivos]) devuelve el número de días laborables completos en el intervalo cerrado de inicio a fin. Los dos extremos están incluidos. Los fines de semana se excluyen, los festivos se excluyen si se los pasas, y eso es toda la función.
La consecuencia ocupa una celda:
=DIAS.LAB(FECHA(2026;8;5); FECHA(2026;8;5)) → 1
Un día laborable, para un ticket abierto a las 09:40 y cerrado a las 15:10 del mismo miércoles. No transcurrió nada. La función no está equivocada — está respondiendo a cuántos días laborables contiene este intervalo, y la respuesta es uno, el miércoles. El informe preguntaba cuánto tardó esto, y la respuesta a eso es cero.
Así que las dos medidas se diferencian en uno siempre que los dos extremos son días laborables:
| Lo que quieres | Fórmula | Lun 3 ago → Lun 10 ago |
|---|---|---|
| Días laborables que toca el intervalo | =DIAS.LAB(B2;C2;Festivos) | 6 |
| Días laborables transcurridos | =DIAS.LAB(B2;C2;Festivos)-1 | 5 |
El -1 solo es correcto mientras la fecha de inicio sea en sí un día laborable. Registra un ticket a las 22:00 de un sábado y DIAS.LAB cuenta desde el lunes, así que restar uno ahora se queda corto en un día. Eso no es un argumento a favor de una resta más lista; es la razón por la que la sección 5 deja de contar del todo y compara contra una fecha de vencimiento.
🎯 Escenario: Pon =DIAS.LAB(A1;A1) en una celda vacía con cualquier fecha laborable en A1. Devuelve 1, y esa única celda es el desfase entero, demostrado de una forma que puedes enseñarle a alguien en diez segundos. Cambia A1 por un sábado y devuelve 0.
3) El Argumento de Festivos Es Opcional en la Sintaxis y Obligatorio en la Práctica
El tercer argumento es una fecha, un rango de fechas o una matriz de ellas, y toda fecha de esa lista que caiga en día entre semana dentro del intervalo se quita del recuento.
=DIAS.LAB(FECHA(2026;8;24); FECHA(2026;9;1)) → 7
=DIAS.LAB(FECHA(2026;8;24); FECHA(2026;9;1); Festivos) → 6
Déjalo fuera y Excel no te avisa, porque no hay nada de lo que avisar: una función a la que no se le dan festivos informa correctamente de que no se excluyó ningún festivo. El libro no tiene ninguna opinión sobre en qué país estás, qué oficina observa qué, ni sobre si la lista que le dieron en 2024 sigue siendo cierta.
Esta seguía siendo cierta, hasta que dejó de serlo. El rango con nombre Festivos existía, en una pestaña llamada Ref, y iba del 01/01/2024 al 26/12/2025 — dos años escritos a mano por alguien que ya no está, y nunca ampliados. Tampoco se le pasaba a la fórmula, que es la mitad más embarazosa de la historia y la mitad que hizo invisibles las filas que faltaban: ni siquiera una lista al día puede ayudar a una fórmula que no la referencia.
Cuatro cosas sobre las listas de festivos que conviene saber antes de montar una:
- Un festivo que cae en fin de semana no resta nada. El 26 de diciembre de 2026 es sábado. Poner
26/12/2026en la lista no cambia ningún recuento en ninguna parte, porque ese día nunca se contó. Lo que de verdad cierra es el día sustitutorio, el lunes 28 de diciembre de 2026, y esa es la fecha que necesita la lista. - El texto que parece una fecha rompe la fórmula entera, y a voces. Pega una lista de festivos de una página web y normalmente obtienes texto alineado a la izquierda en vez de fechas.
DIAS.LABdevuelve#¡VALOR!para toda la columna en vez de ignorar la entrada mala en silencio — el único fallo de esta familia que se anuncia. - Los duplicados son inofensivos. La misma fecha dos veces en la lista se quita una vez. No hace falta deduplicar antes de usarla.
- Los huecos también son inofensivos. Un rango sobredimensionado —
Ref!$A$2:$A$500contra 60 festivos reales — lee las celdas vacías como cero, y el número de serie 0 es una fecha de enero de 1900 que queda fuera de cualquier intervalo que vayas a medir nunca. Dimensiona el rango para los próximos cinco años y deja de pensar en ello.
🎯 Escenario: En una celda vacía, =TEXTO(MAX(Festivos);"dd/mm/aaaa"). Ese es el último día que tu libro cree que es festivo. Si está en el pasado, todo recuento que cruce un festivo desde entonces va un día alto, y el informe lleva desviándose exactamente el tiempo que lleva caducada la lista.
4) La Fecha de Resolución en Blanco Que Imprimió "Cumple" con −33.032
Una celda vacía entregada a una función de fecha no es un error ni un vacío. Es cero, y cero es una fecha: el 0 de enero de 1900, el día anterior al comienzo de la era de Excel.
Así que un ticket sin resolver le pide a DIAS.LAB que cuente días laborables desde el 11 de agosto de 2026 hasta el principio del calendario, y la función lo hace, correctamente, en los dos sentidos:
=DIAS.LAB(B2; C2) ' B2 = 11/08/2026, C2 vacía → -33032
=SI(D2<=5; "Cumple"; "Incumple") → "Cumple"
No hay ninguna regla en Excel que diga que una duración tiene que ser positiva, y no hay ninguna regla en una comparación <= que diga que un número negativo grande es sospechoso. La columna de veredicto se montó para pillar números demasiado grandes. Nada en ella se montó para pillar un número demasiado pequeño, porque hasta que faltó una fecha de resolución, demasiado pequeño no era algo que pudiera pasar.
Este es el fallo que costó más que los 2.400 £. Los tres tickets eran los tres más viejos del libro, y el informe que todo el mundo usaba para decidir qué perseguir decía que estaban hechos.
Dos guardas, y con cualquiera de las dos basta:
=SI(C2=""; "Abierto"; SI(DIAS.LAB(B2;C2;Festivos)-1<=5; "Cumple"; "Incumple"))
=SI(C2=""; ""; DIAS.LAB(B2;C2;Festivos)-1)
Comprueba la entrada, no la salida. Un blanco es un hecho sobre el ticket — no está terminado — y un informe que lo dobla en un número ha tirado ese hecho antes de llegar a ningún veredicto.
🎯 Escenario: =CONTAR.BLANCO(C2:C146) sobre tu columna de fecha final, y =SUMAPRODUCTO(--(D2:D146<0)) sobre tu columna de duración. La primera cuenta las filas que todavía no se pueden medir; la segunda cuenta las filas que se midieron igualmente. Las dos deberían dar cero, y en esta hoja la segunda daba 3.
5) DIA.LAB Es la Otra Mitad de la Pareja, y No Cuenta el Día de Inicio
=DIA.LAB(inicio; días; [festivos]) va en el otro sentido: dale una fecha y un número de días laborables y devuelve la fecha que queda tantos días laborables después, saltándose fines de semana y festivos.
=DIA.LAB(FECHA(2026;8;3); 5; Festivos) → 10/08/2026
=DIA.LAB(FECHA(2026;8;24); 5; Festivos) → 01/09/2026
DIA.LAB cuenta hacia delante desde la fecha de inicio sin contarla, que es exactamente la medida que quiere decir el acuerdo y exactamente la medida que DIAS.LAB no te da. Las dos funciones son coherentes entre sí — DIAS.LAB(inicio; DIA.LAB(inicio;5)) da 6 — e incoherentes con la intuición de la otra, que es toda la razón por la que el desfase de uno sobrevive en tantos archivos.
Esa asimetría es un regalo, porque significa que no tienes que volver a razonar sobre la regla de recuento nunca más. Calcula el vencimiento una vez, compara la resolución contra él, y la pregunta ¿cuenta el día de inicio? desaparece dentro de una función que ya la ha respondido:
=DIA.LAB(B2; 5; Festivos) → la fecha de vencimiento
=SI(C2=""; "Abierto"; SI(C2<=D2; "Cumple"; "Incumple")) → el veredicto
Dos cosas más que hace:
- Maneja una fecha de inicio que no es laborable. Un ticket registrado a las 22:00 del sábado 1 de agosto recibe
DIA.LAB(01/08/2026; 5)= viernes 7 de agosto, con el reloj empezando en la práctica el lunes. Sin caso especial, sinSI. - Camina hacia atrás con un número negativo.
=DIA.LAB(FIN.MES(HOY();0)+1; -3; Festivos)es el antepenúltimo día laborable de este mes — la forma de todo cierre de plazo, remesa de pagos y fecha límite de envío que alguien haya tenido que publicar.
DIA.LAB devuelve un número de serie, así que una celda con formato General muestra 46244 en vez de una fecha. Da formato de fecha a la columna una vez y no vuelve a aparecer.
🎯 Escenario: Añade una columna a tu informe de antigüedad — =DIA.LAB(registro; <tu plazo>; Festivos) — y ordena por ella. Ahora tienes una cola en el orden en que caen de verdad los vencimientos, que no es el orden en que caen las fechas de registro, porque un ticket registrado un viernes por la tarde vence antes que uno registrado el lunes por la mañana aunque haya estado más tiempo en la cola.
6) DIAS.LAB.INTL y DIA.LAB.INTL: Cuando la Semana No Es de Lunes a Viernes
Las dos funciones tienen una hermana .INTL con un argumento extra en tercera posición, antes de los festivos, que dice cuáles son los días de fin de semana.
=DIAS.LAB.INTL(inicio; fin; [fin_de_semana]; [festivos])
=DIA.LAB.INTL(inicio; días; [fin_de_semana]; [festivos])
El argumento de fin de semana admite un código o una cadena:
| Código | Fin de semana | Código | Fin de semana | |
|---|---|---|---|---|
| 1 u omitido | sábado, domingo | 11 | solo domingo | |
| 2 | domingo, lunes | 12 | solo lunes | |
| 3 | lunes, martes | 13 | solo martes | |
| 4 | martes, miércoles | 14 | solo miércoles | |
| 5 | miércoles, jueves | 15 | solo jueves | |
| 6 | jueves, viernes | 16 | solo viernes | |
| 7 | viernes, sábado | 17 | solo sábado |
La forma de cadena son siete caracteres, empezando en lunes, con 1 para día no laborable:
=DIAS.LAB.INTL(B2; C2; "0000110"; Festivos) ' libra viernes y sábado
=DIAS.LAB.INTL(B2; C2; "0000011"; Festivos) ' el sábado y domingo de siempre, escrito
=DIAS.LAB.INTL(B2; C2; "0001011"; Festivos) ' semana de cuatro días, jueves libre
=DIAS.LAB.INTL(B2; C2; "0000001"; Festivos) ' semana de seis días, solo domingo
No existe una cadena con siete 1 — una semana sin ningún día laborable devuelve #¡VALOR! en vez de dividir tu calendario por cero.
La cadena es la que conviene usar, porque cubre los casos que los códigos no pueden: un único día no laborable en mitad de la semana, una planta que cierra los miércoles, un turno a tiempo parcial. Y son los mismos siete caracteres en todas las versiones de idioma de Excel, cosa que de un código no está garantizada.
🎯 Escenario: Si alguna parte de tu operación trabaja una semana que no es de lunes a viernes, pon la cadena de fin de semana en una celda al lado de la lista de festivos, no dentro de la fórmula. =DIAS.LAB.INTL(B2;C2;$F$1;Festivos) es una edición cuando cambia el turno; la misma cadena escrita en 400 fórmulas es un buscar-y-reemplazar y un padrenuestro.
7) Las Horas No Son Días, y Casi Todos los Acuerdos Van en Horas
DIAS.LAB tira la parte horaria de los dos argumentos. Un ticket registrado a las 16:55 del lunes y cerrado a las 09:05 del viernes, y otro registrado a las 09:05 del lunes y cerrado a las 16:55 del viernes, devuelven el mismo número, y el segundo tardó dos días laborables completos más que el primero.
Si tus marcas de tiempo llevan hora — y un registro de tickets exportado casi siempre la lleva — estás midiendo fronteras de calendario cruzadas, no trabajo hecho. Esa es una medida legítima, y es la medida en la que están escritos casi todos los contratos, pero conviene saber cuál de las dos tienes.
Cuando el acuerdo va de verdad en horas, cuenta las horas:
=LET(
ini; B2; fin; C2; horasdia; 7,5; abre; 9/24;
completos; DIAS.LAB(ini; fin; Festivos) - 2;
primero; MEDIANA(0; (abre + horasdia/24 - RESIDUO(ini;1)) * 24; horasdia);
ultimo; MEDIANA(0; (RESIDUO(fin;1) - abre) * 24; horasdia);
completos*horasdia + primero + ultimo
)
Sin LET, lo mismo en tres columnas auxiliares — días laborables intermedios, horas que quedaban el primer día, horas usadas el último — es más claro de auditar y más fácil de explicarle a quien te discuta un número. En cualquier caso, la regla es que la unidad de la fórmula coincida con la unidad del contrato. Un acuerdo de cinco días medido en días y uno de 37,5 horas medido en horas son informes distintos que discreparán exactamente en los tickets por los que la gente discute.
🎯 Escenario: =SUMAPRODUCTO(--(RESIDUO(B2:B146;1)>0)) sobre tu columna de inicio. Si no da cero, tus fechas llevan hora, y todo recuento de días completos del archivo está redondeando el día de alguien hacia arriba o hacia abajo sin decirlo.
8) Una Lista de Festivos Por Calendario, No Una Por Libro
Un servicio que atiende a un cliente británico y a otro irlandés tiene dos calendarios. Coinciden en Navidad y difieren en el primer lunes de junio, y un único rango Festivos aplica en silencio los días libres de un país a los tickets del otro.
Guarda los festivos en una tabla de dos columnas — Fecha y Calendario — y selecciona los correctos por fila:
=DIAS.LAB(B2; C2; FILTRAR(Fest[Fecha]; Fest[Calendario]=$D2))
El argumento de festivos admite una matriz, así que un FILTRAR derramado entra directamente sin nada envolviéndolo. Antes de FILTRAR — Excel 2019 y anteriores — mantén una columna por calendario, una al lado de otra, y apunta a la correcta con INDICE/COINCIDIR sobre la fila de encabezados, o simplemente ten dos rangos con nombre y elige con SI. Lo que no deberías hacer es tener dos libros.
🎯 Escenario: =CONTARA(Fest[Fecha])-CONTAR(Fest[Fecha]) devuelve cuántas entradas de tu tabla de festivos son texto en vez de fechas. Debería ser cero. Cualquier otra respuesta es el #¡VALOR! de la sección 3 esperando a la fila a la que le toque.
9) Una Tabla de Festivos Que No Pueda Caducar en Silencio
La lista que rompió este informe no se rompió. Se acabó. Nada en Excel trata el final de una lista como un acontecimiento, así que mete la comprobación en la hoja:
=SI(MAX(Fest[Fecha]) < FIN.MES(HOY();3);
"LA LISTA DE FESTIVOS ACABA EL " & TEXTO(MAX(Fest[Fecha]);"dd/mm/aaaa") & " — AMPLÍALA";
"")
Pon eso en una celda arriba del informe, en rojo, donde quien lo ejecuta tenga que mirarlo. Tres meses de margen dan para arreglarlo con calma y son pocos como para que nadie lo ignore durante un año.
Los festivos de fecha fija se pueden generar en vez de escribirlos, incluida la regla del día sustitutorio que pilla a la gente:
=FECHA(A2;12;25) ' Navidad, caiga en el día que caiga
=DIA.LAB(FECHA(A2;12;25)-1; 1) ' el día en que se observa de verdad
=FECHA(A2;5;1) + RESIDUO(8-DIASEM(FECHA(A2;5;1);2);7) ' primer lunes de mayo
=FECHA(A2;6;1) - RESIDUO(DIASEM(FECHA(A2;6;1);2)-2;7)-1 ' último lunes de mayo
=FECHA(A2;9;1) - RESIDUO(DIASEM(FECHA(A2;9;1);2)-2;7)-1 ' último lunes de agosto
La Pascua no es una fórmula de una línea de la que nadie deba fiarse, y los festivos que se mueven con ella — Viernes Santo el 3 de abril de 2026, Lunes de Pascua el día 6 — se escriben a mano. Igual que todo lo discrecional: el día entre Navidad y Año Nuevo que cierra tu oficina y el calendario oficial no.
🎯 Escenario: Pon el año en una columna y las fechas generadas al lado, cinco años hacia delante, y compáralas una vez contra la lista publicada por tu administración. A partir de ahí las únicas filas que alguien mantiene a mano son la Pascua y los cierres propios de la empresa — unas cuatro celdas al año.
10) El Informe, Reconstruido en Cuatro Columnas
D2: =DIA.LAB(B2; 5; Fest[Fecha]) ' vencimiento
E2: =SI(C2=""; SI(HOY()>D2; "Incumplido — sigue abierto"; "Abierto");
SI(C2<=D2; "Cumple"; "Incumple")) ' veredicto
F2: =SI(C2=""; ""; DIAS.LAB(B2; C2; Fest[Fecha]) - 1) ' días laborables tardados
G2: =SI(C2=""; MAX(0; DIAS.LAB(D2;HOY();Fest[Fecha]) - 1); "") ' días laborables de retraso
O en una sola celda, si tienes LET:
=LET(
registro; B2; resuelto; C2;
vence; DIA.LAB(registro; 5; Fest[Fecha]);
SI(resuelto="";
SI(HOY()>vence; "Incumplido — abierto " & DIAS.LAB(vence;HOY();Fest[Fecha])-1 & "d"; "Abierto");
SI(resuelto<=vence; "Cumple"; "Incumplido por " & DIAS.LAB(vence;resuelto;Fest[Fecha])-1 & "d"))
)
Lo que ha cambiado no es la aritmética. Es que el veredicto sale ahora de una comparación de fechas en vez de un recuento, así que la regla de recuento no se puede equivocar; el vencimiento lo calcula la función cuyo trabajo son los vencimientos; los festivos se nombran en todas las fórmulas que tocan un calendario; y un ticket sin resolver es un estado que el informe entiende en vez de una celda vacía que convierte en silencio a 1900.
Pásalo sobre agosto y devuelve 20 incumplimientos, 3 de ellos todavía abiertos, y una tasa del 13,79%.
🎯 Escenario: Reconstruye un mes que ya hayas informado, en una copia, con la versión de fecha de vencimiento. Si las dos discrepan, la discrepancia es la lista de todas las filas por las que alguna vez se discutió, y suele ser lo bastante corta para revisarla a mano y lo bastante larga para que merezca la tarde.
11) Cinco Comprobaciones de Una Celda
- ¿El recuento es inclusivo?
=DIAS.LAB(A1;A1)con una fecha laborable enA1. Devuelve 1. Si tu informe trata eso como un día tardado, todas sus duraciones van una de más. - ¿Se ha acabado la lista de festivos?
=TEXTO(MAX(Fest[Fecha]);"dd/mm/aaaa"). Compárala con la última fecha de tus datos. Esta decía 26/12/2025 contra un informe de agosto de 2026. - ¿Se está midiendo algo al revés?
=SUMAPRODUCTO(--(DIAS.LAB(B2:B146;C2:C146;Fest[Fecha])<0)). Cuenta las filas donde la fecha final precede a la inicial, huecos incluidos. Daba 3, debería dar 0. - ¿Llegan los festivos a las fórmulas?
=DIAS.LAB(FECHA(2026;8;28);FECHA(2026;9;1);Fest[Fecha]). Devuelve 2 si el festivo de agosto está en la lista y llega a la función, y 3 si no. Sirve cualquier fecha que sepas que es festiva. - ¿Coinciden dos caminos?
=CONTAR.SI(E2:E146;"Incumple")contra=SUMAPRODUCTO(--(C2:C146>D2:D146)*(C2:C146<>"")). La columna de veredicto y la comparación cruda deberían dar el mismo número. Cuando no lo dan, la cadena deSItiene un caso que nadie diseñó.
12) Doce Trampas
DIAS.LABincluye los dos extremos. El mismo día es 1, no 0, y de lunes al lunes siguiente es 6, no 5. Resta uno, o deja de contar y compara contra un vencimiento deDIA.LAB.DIA.LABexcluye el día de inicio. La pareja no es simétrica, y por eso mezclarlas en un mismo informe produce dos definiciones de "cinco días" en columnas contiguas.- El argumento de festivos es opcional y su ausencia es invisible. Sin error, sin marca, sin color — solo recuentos altos exactamente en el número de festivos que abarcan tus datos.
- Una lista de festivos tiene una última fila. No caduca, no avisa, no falla; simplemente deja de ser cierta, y el informe sigue imprimiendo.
- Un festivo en fin de semana no hace nada. Excel ya se lo había saltado. El día sustitutorio entre semana es la fecha que tiene que estar en la lista.
- Una fecha final en blanco es el 0 de enero de 1900, así que algo sin terminar devuelve un negativo de cinco cifras y pasa todas las pruebas de "por debajo del límite" del archivo.
- Las fechas en texto devuelven
#¡VALOR!para la fórmula entera, incluida una sola entrada de texto enterrada en un rango de festivos por lo demás limpio. - Las horas se tiran en silencio. De las 16:55 del lunes a las 09:05 del viernes y de las 09:05 del lunes a las 16:55 del viernes cuentan igual.
- El argumento de fin de semana va en tercera posición en las
.INTL, donde van los festivos en la versión normal.=DIAS.LAB.INTL(B2;C2;Festivos)lee tu rango de festivos como un código de fin de semana. - Una cadena de fin de semana son siete caracteres empezando en lunes, y
"0000011"es el fin de semana normal. Ponerla del revés produce una semana laboral de sábado y domingo, que cuenta alrededor del 40% de lo que esperabas y no da error nunca. HOY()es volátil. Un informe de días de retraso recalcula cada vez que se abre el archivo, así que la copia guardada del mes pasado no dice lo que decía cuando se envió. Pega las columnas de antigüedad como valores antes de archivar.DIA.LABdevuelve un número de serie. Una columna de vencimientos sin formato llena de 46244 es la única trampa de esta lista que se nota al instante, lo que la convierte en la más barata.
Nadie en esta historia hizo nada descabellado. =DIAS.LAB(B2;C2) es lo que ofrece el explorador de funciones cuando escribes días laborables, la forma de dos argumentos es la que enseña primero cualquier tutorial, y contar días es la manera obvia de responder a una pregunta sobre un número de días. La lista de festivos la montó alguien lo bastante concienzudo como para montar una lista de festivos. La columna de veredicto se escribió para pillar tickets que tardaban demasiado, y los pilló.
Lo que lo hizo caro es que los tres fallos empujan el número en la dirección que parece una mala noticia. Un recuento inclusivo sale alto. Un festivo que falta sale alto. Un informe que dice que tu equipo falla más de lo que falla se escala, se investiga y se paga — y todas esas respuestas tratan el número como un suelo en vez de como una pregunta. El único fallo que empujaba en el otro sentido era invisible por construcción, porque los tickets que escondía eran los que se informaban como terminados, y nadie audita las filas que pasaron.
Así que la disciplina es pequeña, y son tres costumbres. Calcular el vencimiento con DIA.LAB en vez de contar días con DIAS.LAB, para que la función que conoce la regla de recuento sea la que la aplica. Nombrar un rango de festivos, pasárselo a todas las fórmulas que tocan un calendario, y poner una celda arriba del informe que se ponga roja tres meses antes de que la lista se acabe. Y comprobar las entradas antes que el veredicto — una fecha final en blanco es un estado, no un cero, y en cuanto a un informe se le permite convertir sin terminar en un número, las peores filas del archivo son las que va a esconder.
