Tenemos el siguiente modelo, donde tenemos una orden, y, tres fechas unidas separadas por coma para cada orden.
El proceso de pedido consta de tres pasos: registro, evaluación y aprobación.
Las fechas del pedido se proporcionan en una sola celda.
Transforme la tabla en la tabla de resultados.
En la celda E3, usamos LET, creamos una variable, usamos la funcion REDUCE, como argumento valor inicial ponemos blanco, como argumento array, seleccionamos el rango B3:B8, concatenamos con un espacio, concatenamos entre comillas dobles con Registro, concatenamos con un espacio, concatenamos con Evaluación, concatenamos con un espacio, concatenamos con Aprobado, como argumento funcion, ponemos LAMBDA, y, declaramos dos variables.
=LET(a;REDUCE("";B3:B8&" "&"Registro"&" "&"Evaluación"&" "&"Aprobado";LAMBDA(x;y
Como argumento calculo, usamos la funcion APILARV, como argumento matriz1, ponemos la variable “x”, como argumento matriz2, usamos la funcion DIVIDIRTEXTO, como argumento texto, usamos la funcion REPETIR, como argumento texto, ponemos la variable “y”, concatenamos con un espacio, como argumento numero de veces, ponemos 3, que son las fechas que hay en cada celda, cerramos paréntesis, como argumento delimitador de fila, ponemos un espacio.
=LET(a;REDUCE("";B3:B8&" "&"Registro"&" "&"Evaluación"&" "&"Aprobado";LAMBDA(x;y;APILARV(x;DIVIDIRTEXTO(REPETIR(y&" ";3);" "))));a)
La funcion REPETIR aplicada a la primera celda con fechas nos devuelve en una celda tres veces la primera orden, cada orden separada por un espacio.
Como resultado de la expresión anterior, tenemos:
Creamos otra variable usamos la funcion FILTRAR, como argumento matriz, ponemos la variable “a”, como argumento include, ponemos la funcion LARGO, como argumento ponemos la variable “a” y, comparamos con igual a 4.
=LET(a;ENCOL(EXCLUIR(REDUCE("";B3:B8&" "&"Registro"&" "&"Evaluación"&" "&"Aprobado";LAMBDA(x;y;APILARV(x;DIVIDIRTEXTO(REPETIR(y&" ";3);" "))));1;-1));b;FILTRAR(a;LARGO(a)=4);b)
Aceptamos, y, tenemos las órdenes.
Creamos otra variable, la función FILTRAR es la misma que para la variable “a”, pero, comparamos con distinto a 4.
=LET(a;ENCOL(EXCLUIR(REDUCE("";B3:B8&" "&"Registro"&" "&"Evaluación"&" "&"Aprobado";LAMBDA(x;y;APILARV(x;DIVIDIRTEXTO(REPETIR(y&" ";3);" "))));1;-1));b;FILTRAR(a;LARGO(a)=4);c;FILTRAR(a;LARGO(a)<>4);c)
Antes de FILTRAR, usamos la funcion TOMAR, como argumento matriz es la funcion FILTRAR, como argumento filas, usamos la funcion CONTARA, como argumento poneos la variable “b”, vamos a obtener el mismo número de filas que de órdenes.
=LET(a;ENCOL(EXCLUIR(REDUCE("";B3:B8&" "&"Registro"&" "&"Evaluación"&" "&"Aprobado";LAMBDA(x;y;APILARV(x;DIVIDIRTEXTO(REPETIR(y&" ";3);" "))));1;-1));b;FILTRAR(a;LARGO(a)=4);c;TOMAR(FILTRAR(a;LARGO(a)<>4);CONTARA(b));c)
Creamos otra variable, usamos la funcion REDUCE, como argumento valor inicial ponemos blanco, como argumento array, seleccionamos el rango C3:C8, como argumento funcion, ponemos LAMBDA, y, declaramos dos variables.
=LET(a;ENCOL(EXCLUIR(REDUCE("";B3:B8&" "&"Registro"&" "&"Evaluación"&" "&"Aprobado";LAMBDA(x;y;APILARV(x;DIVIDIRTEXTO(REPETIR(y&" ";3);" "))));1;-1));b;FILTRAR(a;LARGO(a)=4);c;TOMAR(FILTRAR(a;LARGO(a)<>4);CONTARA(b));d;REDUCE("";C3:C8;LAMBDA(x;y
Como argumento calculo, usamos APILARV, como argumento matriz1, ponemos la variable “x”, como argumento matriz2, usamos la funcion DIVIDRTEXTO, como argumento texto, ponemos la variable “y”, como argumento delimitador de columna, entre comillas dobles, ponemos coma, y, dejamos un espacio.
=LET(a;ENCOL(EXCLUIR(REDUCE("";B3:B8&" "&"Registro"&" "&"Evaluación"&" "&"Aprobado";LAMBDA(x;y;APILARV(x;DIVIDIRTEXTO(REPETIR(y&" ";3);" "))));1;-1));b;FILTRAR(a;LARGO(a)=4);c;TOMAR(FILTRAR(a;LARGO(a)<>4);CONTARA(b));d;REDUCE("";C3:C8;LAMBDA(x;y;APILARV(x;DIVIDIRTEXTO(y;", "))));d)
Tenemos las fechas separadas de cada fila.
La primera fila está de más, antes de REDUCE, usamos EXCLUIR, como argumento matriz es la funcion REDUCE, como argumento filas, ponemos 1.
=LET(a;ENCOL(EXCLUIR(REDUCE("";B3:B8&" "&"Registro"&" "&"Evaluación"&" "&"Aprobado";LAMBDA(x;y;APILARV(x;DIVIDIRTEXTO(REPETIR(y&" ";3);" "))));1;-1));b;FILTRAR(a;LARGO(a)=4);c;TOMAR(FILTRAR(a;LARGO(a)<>4);CONTARA(b));d;EXCLUIR(REDUCE("";C3:C8;LAMBDA(x;y;APILARV(x;DIVIDIRTEXTO(y;", "))));1);d)
Antes de EXCLUIR, usamos ENCOL.
=LET(a;ENCOL(EXCLUIR(REDUCE("";B3:B8&" "&"Registro"&" "&"Evaluación"&" "&"Aprobado";LAMBDA(x;y;APILARV(x;DIVIDIRTEXTO(REPETIR(y&" ";3);" "))));1;-1));b;FILTRAR(a;LARGO(a)=4);c;TOMAR(FILTRAR(a;LARGO(a)<>4);CONTARA(b));d;ENCOL(EXCLUIR(REDUCE("";C3:C8;LAMBDA(x;y;APILARV(x;DIVIDIRTEXTO(y;", "))));1));d)
Usamos el argumento calculo de LET, usamos APILARH, como argumento matriz1, ponemos la variable “b”, como argumento matriz2, ponemos la variable “c”, como argumento matriz3, ponemos la variable “d”.
=LET(a;ENCOL(EXCLUIR(REDUCE("";B3:B8&" "&"Registro"&" "&"Evaluación"&" "&"Aprobado";LAMBDA(x;y;APILARV(x;DIVIDIRTEXTO(REPETIR(y&" ";3);" "))));1;-1));b;FILTRAR(a;LARGO(a)=4);c;TOMAR(FILTRAR(a;LARGO(a)<>4);CONTARA(b));d;ENCOL(EXCLUIR(REDUCE("";C3:C8;LAMBDA(x;y;APILARV(x;DIVIDIRTEXTO(y;", "))));1));APILARH(b;c;d))
Antes de APILARH, usamos la funcion ORDENAR, como argumento matriz es la funcion APILARH, como argumento ordenar índice, ponemos 1, para ordenar por la primera columna de menor a mayor.
=LET(a;ENCOL(EXCLUIR(REDUCE("";B3:B8&" "&"Registro"&" "&"Evaluación"&" "&"Aprobado";LAMBDA(x;y;APILARV(x;DIVIDIRTEXTO(REPETIR(y&" ";3);" "))));1;-1));b;FILTRAR(a;LARGO(a)=4);c;TOMAR(FILTRAR(a;LARGO(a)<>4);CONTARA(b));d;ENCOL(EXCLUIR(REDUCE("";C3:C8;LAMBDA(x;y;APILARV(x;DIVIDIRTEXTO(y;", "))));1));ORDENAR(APILARH(b;c;d);1))
Aceptamos, y, ya lo tenemos.
Miguel Angel Franco Garcia
Comments