top of page
Foto del escritorJaime Franco Jimenez

Repetir encabezado para cada centro

Para el siguiente ejemplo, vamos a trabajar con el modelo que suelo usar habitualmente, algo más corto, y, con algunas modificaciones.


El primer centro es C.C. Nervion, después apare ce dos veces, el centro Metromar, después aparece tres veces el centro Supermarcados MAS, después cuatro veces el centro Carrefour, y, por último, aparece cinco veces el centro C.C. Vicar.

















El modelo está en formato de tabla, y, se llama Ventas.


Debemos de insertar el encabezado, después de cada centro, es decir, después de C.C. Nervion, después Metromar, y, así con el resto.


Vamos a ir haciéndolo paso por paso, aunque al final, debe de quedar todo en una única función.


En una celda, ponemos la función LET, declaramos una variable, como valor de dicha variable, debemos de trabajar con la columna Centro, nos la traemos con la siguiente expresión:


Probamos la variable.


=LET(a;Ventas[Centro];a)


Creamos otra variable, donde vamos a concatenar cada registro, pero para poder trabajar con cada fila, vamos a usar la función BYROW, como argumento array, es la tabla Ventas.


=LET(a;Ventas[Centro];b;BYROW(Ventas


Como argumento función, ponemos LAMBDA, declaramos una variable que almacena el argumento array.


=LET(a;Ventas[Centro];b;BYROW(Ventas;LAMBDA(x


Como argumento calculo de LAMBDA, usamos UNIRCADENAS, como argumento delimitador, ponemos coma, ignoramos celdas vacías, como argumento texto1, es la variable “x”, cerramos paréntesis.


Probamos la variable.


=LET(a;Ventas[Centro];b;BYROW(Ventas;LAMBDA(x;UNIRCADENAS(",";VERDADERO;x)));b)


Obtenemos una matriz desbordada con cada registro concatenado de forma independiente.
















Creamos otra variable, usamos la función SECUENCIA, como argumento filas, usamos la función FILAS, como argumento ponemos la variable “a”, probamos variable.


=LET(a;Ventas[Centro];b;BYROW(Ventas;LAMBDA(x;UNIRCADENAS(",";VERDADERO;x)));c;SECUENCIA(FILAS(a))


Tenemos una matriz desbordada en vertical con una secuencia de números empezando por el numero 1 hasta la última fila ocupada.




















Creamos otra variable, donde sumamos 1 a la variable “d”.


=LET(a;Ventas[Centro];b;BYROW(Ventas;LAMBDA(x;UNIRCADENAS(",";VERDADERO;x)));c;SECUENCIA(FILAS(a));d;c+1


Obtenemos un número más en la función SECUENCIA.

















Encerramos la operación entre paréntesis, por la prioridad de operadores, después del signo igual, ponemos la variable “c”, y, multiplicamos por la operación anterior.


=LET(a;Ventas[Centro];b;BYROW(Ventas;LAMBDA(x;UNIRCADENAS(",";VERDADERO;x)));c;SECUENCIA(FILAS(a));d;c*(c+1)


Dividimos entre 2.


=LET(a;Ventas[Centro];b;BYROW(Ventas;LAMBDA(x;UNIRCADENAS(",";VERDADERO;x)));c;SECUENCIA(FILAS(a));d;c*(c+1)/2;c)

















Creamos otra variable, ahora, vamos a buscar la variable “d” en la variable “e”, y, que nos devuelva la variable “e”, usamos la función BUSCARX, usamos el argumento si no se encuentra, y, ponemos un texto en blanco.


=LET(a;Ventas[Centro];b;BYROW(Ventas;LAMBDA(x;UNIRCADENAS(",";VERDADERO;x)));c;SECUENCIA(FILAS(a));d;c*(c+1)/2;e;BUSCARX(c;d;d)


Tenemos una matriz desbordada con las filas donde debemos de insertar los encabezados.















Si en la celda siguiente donde estamos creando la función, usamos el condicional SI, donde preguntamos si algún dato de la matriz desbordada es diferente a blanco, que nos devuelva los encabezados, en caso contrario, que nos devuelva blanco.


=SI(I2#<>"";Ventas[#Encabezados];"")


Aceptamos, y, vemos los encabezados colocados en su sitio.










Borramos la expresión, porque solo era para ver dónde van los encabezados.


Creamos otra variable, usamos la función APILARH, como argumento matriz1, ponemos la variable “b”.


=LET(a;Ventas[Centro];b;BYROW(Ventas;LAMBDA(x;UNIRCADENAS(",";VERDADERO;x)));c;SECUENCIA(FILAS(a));d;c*(c+1)/2;e;BUSCARX(c;d;d);f;APILARH(b


Como argumento matriz2, preguntamos si la variable “e” es diferente a blanco, en ese caso, volvemos a usar la función UNIRCADENAS, como argumento delimitador, ponemos un espacio, ignoramos celdas vacías, como argumento texto1, ponemos los encabezados, en caso contrario, ponemos un texto en blanco.


Cerramos paréntesis, probamos la variable.


=LET(a;Ventas[Centro];b;BYROW(Ventas;LAMBDA(x;UNIRCADENAS(",";VERDADERO;x)));c;SECUENCIA(FILAS(a));d;c*(c+1)/2;e;BUSCARX(c;d;d);f;APILARH(b;SI(e>0;UNIRCADENAS(",";VERDADERO;Ventas[#Encabezados]);""))

;f)


Tenemos el modelo con cada registro concatenado con el encabezado, y, error donde deben de ir los registros.













Creamos otra variable, usamos la función ENCOL, para traernos los datos a columnas, probamos la variable.


=LET(a;Ventas[Centro];b;BYROW(Ventas;LAMBDA(x;UNIRCADENAS(",";VERDADERO;x)));c;SECUENCIA(FILAS(a));d;c*(c+1)/2;e;BUSCARX(c;d;d);f;APILARH(b;SI(e>0;UNIRCADENAS(",";VERDADERO;Ventas[#Encabezados]);""));g;ENCOL(f);g)


Tenemos una matriz desbordada, en la variable “f”, vimos que en algunas celdas nos devolvía un error, error, que vemos.























La función ENCOL, tiene un segundo argumento que es omitir, donde podemos indicar que tipo de datos queremos ignorar, si ponemos el valor 3, ignoramos espacios en blanco, y, errores, pues, lo ponemos.


=LET(a;Ventas[Centro];b;BYROW(Ventas;LAMBDA(x;UNIRCADENAS(",";VERDADERO;x)));c;SECUENCIA(FILAS(a));d;c*(c+1)/2;e;BUSCARX(c;d;d);f;APILARH(b;SI(e>0;UNIRCADENAS(",";VERDADERO;Ventas[#Encabezados]);""));g;ENCOL(f;3);g)


Pues, ya lo tenemos.

























Pero, vemos que, en el primer registro, falta el encabezado, y, el ultimo encabezado sobra.


Vamos a usar el argumento calculo de LET, donde usamos la función APILARV, como argumento matriz1, volvemos a traernos los encabezados separados por coma con la función UNIRCADENAS, como argumento matriz2, ponemos la variable “g·.


=LET(a;Ventas[Centro];b;BYROW(Ventas;LAMBDA(x;UNIRCADENAS(",";VERDADERO;x)));c;SECUENCIA(FILAS(a));d;c*(c+1)/2;e;BUSCARX(c;d;d);f;APILARH(b;SI(e>0;UNIRCADENAS(",";VERDADERO;Ventas[#Encabezados]);""));g;ENCOL(f;3);APILARV(UNIRCADENAS(",";VERDADERO;Ventas[#Encabezados]);g))


Ya lo tenemos.
























Vemos quela fecha no tiene formato de fecha, sino formato general.


La fecha en formato general ocupa cinco caracteres, vamos a la expresión de la variable “g”, antes de ENCOL, ponemos la función IZQUIERDA, como argumento texto es la función ENCOL, como argumento numero de caracteres, ponemos cinco, cerramos paréntesis de IZQUIERDA.


=LET(a;Ventas[Centro];b;BYROW(Ventas;LAMBDA(x;UNIRCADENAS(",";VERDADERO;x)));c;SECUENCIA(FILAS(a));d;c*(c+1)/2;e;BUSCARX(c;d;d);f;APILARH(b;SI(e>0;UNIRCADENAS(",";VERDADERO;Ventas[#Encabezados]);""));g;TEXTO(IZQUIERDA(ENCOL(f;3);5);"dd/mm/aaaa")


Concatenamos con la función DERECHA, como argumento texto, es la función ENCOL, como argumento numero de caracteres, ponemos la función LARGO, como argumento de LARGO, es la función ENCOL, y, restamos 5, cerramos paréntesis de la función DERECHA.


=LET(a;Ventas[Centro];b;BYROW(Ventas;LAMBDA(x;UNIRCADENAS(",";VERDADERO;x)));c;SECUENCIA(FILAS(a));d;c*(c+1)/2;e;BUSCARX(c;d;d);f;APILARH(b;SI(e>0;UNIRCADENAS(",";VERDADERO;Ventas[#Encabezados]);""));g;TEXTO(IZQUIERDA(ENCOL(f;3);5);"dd/mm/aaaa")&DERECHA(ENCOL(f;3);LARGO(ENCOL(f;3))-5);h;APILARV(UNIRCADENAS(",";VERDADERO;Ventas[#Encabezados]);g);h)


Ya lo tenemos.

























Lo siguiente es separar cada registro en campos, cosa que podemos hacer con la función DIVIDIRTEXTO, pero, esta función no la podemos usar de forma matricial, ni aun con la función BYROW, por lo que voy a usar DIVIDRTEXTO en el primer registro, y, después arrastramos, sin seleccionar la última fila.


=DIVIDIRTEXTO(I1;",")


















Por último, vamos a dar un formato condicional a los diferentes encabezados, para ello, seleccionamos el modelo, desplegamos formato condicional, seleccionamos nueva regla.


















En la ventana que se abre, seleccionamos la última opción, en la venta dar formato, ponemos el signo igual, el símbolo dólar y la celda J1, e, igualamos entre comillas dobles a Fecha, damos un formato.











Aceptamos.


Ponemos bordes.






















Miguel Angel Franco

10 visualizaciones0 comentarios

Entradas recientes

Ver todo

Comments


bottom of page