Dias trabajados por empleados
- Jaime Franco Jimenez

- 26 sept 2023
- 2 Min. de lectura
En el siguiente modelo, tenemos una primera columna con empleados.

Después, tenemos un modelo, donde en la primera columna tenemos fechas, y, en la segunda columna empelados.

En el siguiente modelo debemos de poner los dias que cada empleado ha trabajado, un trabajador puede haber trabajado varias veces en el mismo día, y, hay trabajadores que no han trabajado en ninguno de los dias que aparecen en la columna fecha.
En la celda G2, ponemos LET, creamos una variable, filtramos el rango C2:C14 (fechas), como argumento include, seleccionamos el rango D2:D14 (empleados), e, igualamos a F2 (primer nombre).
Probamos variable.
=LET(a;FILTRAR(C2:C14;D2:D14=F2);a)
Nos devuelve un error, porque Miguel no ha trabajado ningún día, pues, usamos el argumento si vacío de FILTRAR, y, ponemos un texto en blanco.

Creamos otra variable, usamos la función FRECUENCIA, para obtener las veces que se repiten cada valor, como argumento datos, ponemos la variable “a”, como argumento grupos, ponemos la variable “a”, probamos variable.
=LET(a;FILTRAR(C2:C14;D2:D14=F2);b;FRECUENCIA(a;a);b)
Nos vuelve a dar error, porque Miguel no ha trabajado, vamos a cambiar F2 por F4, que tiene dias trabajados.

Obtenemos una matriz desbordada en vertical con las veces que aparece cada fecha.
Vemos que la fecha 01/10/2023 aparece tres veces.

La función FRECUENCIA, nos da el recuento en la primera celda, el resto de las fechas iguales aparecen ceros.
La fecha 03/10/2023 aparece dos veces.

La función FRECUENCIA siempre devuelve una celda mas con el valor cero.

Creamos otra variable, usamos HALLAR, como argumento texto buscado, ponemos la variable “a”, como argumento dentro del texto ponemos G1 mas el operador de rango derramado (#), probamos variable.
=LET(a;FILTRAR(C2:C14;D2:D14=F4);b;FRECUENCIA(ABS(a);ABS(a));c;HALLAR(a;G1#);c)
Obtenemos una matriz desbordada con 1 donde hay coincidencia, y, error donde no la hay.

Usamos la función ESNUMERO.
=LET(a;FILTRAR(C2:C14;D2:D14=F4);b;FRECUENCIA(ABS(a);ABS(a));c;ESNUMERO(HALLAR(a;G1#));c)
Obtenemos VERDADERO donde es número, y, FALSO donde no lo es.

Preguntamos que, si es número, nos devuelva la variable “b”, en caso contrario, que devuelva blanco.
=LET(a;FILTRAR(C2:C14;D2:D14=F4);b;FRECUENCIA(ABS(a);ABS(a));c;SI(ESNUMERO(HALLAR(a;G1#));b;"");c)
Obtenemos el resultado de FRECUENCIA, y, blanco donde no hay resultados que mostrar.

Como la función FRECUENCIA devuelve una celda mas con cero, tenemos un error, quitamos el error con SI.ERROR, y, ponemos un texto en blanco.
=LET(a;FILTRAR(C2:C14;D2:D14=F4);b;FRECUENCIA(ABS(a);ABS(a));c;SI.ERROR(SI(ESNUMERO(HALLAR(a;G1#));b;"");"");c)

Debemos de sumar los valores, que son las veces que un trabajador ha trabajado en un día, si usamos la función SUMA nos dará la suma de todos los unos, y, debemos de sumar los unos de cada columna, para ello, usamos BYCOL, como argumento array, es la expresión anterior.
=LET(a;FILTRAR(C2:C14;D2:D14=F4);b;FRECUENCIA(ABS(a);ABS(a));c;BYCOL(SI.ERROR(SI(ESNUMERO(HALLAR(a;G1#));b;"");"")
Como argumento función, ponemos LAMBDA, creamos una variable, y, sumamos la variable “x”.
=LET(a;FILTRAR(C2:C14;D2:D14=F4);b;FRECUENCIA(ABS(a);ABS(a));c;BYCOL(SI.ERROR(SI(ESNUMERO(HALLAR(a;G1#));b;"");"");LAMBDA(x;SUMA(x)));c)
Ya tenemos los dias trabajados para Mari.

Cambiamos F4 por F2.
Fijamos las siguientes referencias.
=LET(a;FILTRAR($C$2:$C$14;$D$2:$D$14=F2);b;FRECUENCIA(ABS(a);ABS(a));c;BYCOL(SI.ERROR(SI(ESNUMERO(HALLAR(a;$G$1#));b;"");"");LAMBDA(x;SUMA(x)));c)
Aceptamos, arrastramos, y, ya lo tenemos.

Si comparamos algunos de los resultados obtenidos con el modelo, veremos que los resultados son correctos.
Miguel Angel Franco




Comentarios