Transponer modelo
- Jaime Franco Jimenez

- 22 nov 2023
- 3 Min. de lectura
Tenemos el siguiente modelo:
Debemos de crear un modelo como el que sigue:
En la celda A11, usamos LET, creamos una variable, usamos la funcion CONCAT, como argumento texto1, seleccionamos el rango A2:A6, y, concatenamos con la barra inclinada.
=LET(a; CONCAT(A2:A6&"/");a)
Tenemos los ID de empleados en una fila, separado cada ID por la barra inclinada y un espacio.
Usamos la funcion REPETIR, como argumento texto es la funcion CONCAT, como argumento numero de veces, ponemos 4.
=LET(a; REPETIR(CONCAT(A2:A6&"/");4);a)
Tenemos repetido cada ID de empleado el número de veces y en el orden que necesitamos, como debe de aparecer en vertical primero unido el nombre y apellido, debe de aparecer cada id de empleado, a continuación, debe de aparecer el cumpleaños, por lo que también deben de aparecer los Id de empleados, después los salarios, y, por ultimo las ventas, quiere decir que el bloque de ID de empleados, debe de aparecer cinco veces.
Usamos la funcion DIVIDIRTEXTO, como argumento texto, es la funcion REPETIR, ignoramos el argumento delimitador de columna, como argumento delimitador de fila, entre comillas dobles, ponemos la barra invertida.
=LET(a;DIVIDIRTEXTO(REPETIR(CONCAT(A2:A6&"/");4);;"/");a)
Ya tenemos los id de empleados en vertical, repetido la secuencia de id cinco veces.
Vemos, que tenemos una fila de más, pues, usamos la funcion EXCLUIR, como argumento matriz, es la funcion DIVIDIRTEXTO, como argumento filas, ponemos -1.
=LET(a;EXCLUIR(DIVIDIRTEXTO(REPETIR(CONCAT(A2:A6&"/");4);;"/");-1);a)
Ya tenemos la columna ID de empleado.
Vamos por la columna Atributo1.
Creamos otra variable, usamos APILARV, como argumento matriz1, entre comillas dobles, ponemos Nombre completo, como argumento matriz2, entre comillas dobles, ponemos Cumpleaños, como argumento matriz3, entre comillas dobles, ponemos Salario, como argumento matriz4, entre comillas dobles, ponemos Ventas, y, concatenamos con la barra inclinada.
=LET(a; EXCLUIR(DIVIDIRTEXTO(REPETIR(CONCAT(A2:A6&"/");4);;"/");-1);b;APILARV("Nombre completo";"Cumpleaños";"Salario";"Ventas")&"/";b)
Tenemos una matriz desbordada en vertical con dichas palabras.
Repetimos cada palabra cinco veces.
=LET(a; EXCLUIR(DIVIDIRTEXTO(REPETIR(CONCAT(A2:A6&"/");4);;"/");-1);b;REPETIR(APILARV("Nombre completo";"Cumpleaños";"Salario";"Ventas")&"/";5);b)
Usamos la funcion UNIRCADENAS, como argumento delimitador, ponemos dobles comillas dobles, ignoramos celdas vacías, como argumento texto1, es la funcion REPETIR.
=LET(a; EXCLUIR(DIVIDIRTEXTO(REPETIR(CONCAT(A2:A6&"/");4);;"/");-1) ;b;UNIRCADENAS("";VERDADERO;REPETIR(APILARV("Nombre completo";"Cumpleaños";"Salario";"Ventas")&"/";5));b)
Usamos la funcion DIVIDIRTEXTO, como argumento texto es la funcion UNIRCADENAS, ignoramos el argumento delimitador de columna, como argumento delimitador de fila, entre comillas dobles, ponemos la barra inclinada.
=LET(a; EXCLUIR(DIVIDIRTEXTO(REPETIR(CONCAT(A2:A6&"/");4);;"/");-1) ;b;DIVIDIRTEXTO(UNIRCADENAS("";2;REPETIR(APILARV("Nombre completo";"Cumpleaños";"Salario";"Ventas")&"/";5));;"/");b)
Nos sobra la ultima fila, volvemos a usar EXCLUIR.
=LET(a; EXCLUIR(DIVIDIRTEXTO(REPETIR(CONCAT(A2:A6&"/");4);;"/");-1) ;b;EXCLUIR(DIVIDIRTEXTO(UNIRCADENAS("";2;REPETIR(APILARV("Nombre completo";"Cumpleaños";"Salario";"Ventas")&"/";5));;"/");-1);b)
Ya tenemos la columna atributo1.
Lo siguiente es la columna valor1.
Creamos otra variable, usamos MAP, como argumento array, seleccionamos el rango B2:B6, como argumento array2, seleccionamos el rango C2:C6, ponemos LAMBDA, y, declaramos dos variables.
=LET(a; EXCLUIR(DIVIDIRTEXTO(REPETIR(CONCAT(A2:A6&"/");4);;"/");-1) ;b;EXCLUIR(DIVIDIRTEXTO(UNIRCADENAS("";2;REPETIR(APILARV("Nombre completo";"Cumpleaños";"Salario";"Ventas")&"/";5));;"/");-1);c;MAP(B2:B6;C2:C6;LAMBDA(x;y
Como argumento calculo de LAMBDA, usamos UNIRCADENAS, como argumento delimitador, ponemos un espacio, ignoramos celdas vacías, o, ignoramos el argumento, como argumento texto1, ponemos la variable “x”, como argumento texto2, ponemos la variable “y”.
Vamos a conseguir la unión del nombre y apellido.
=LET(a; EXCLUIR(DIVIDIRTEXTO(REPETIR(CONCAT(A2:A6&"/");4);;"/");-1) ;b;EXCLUIR(DIVIDIRTEXTO(UNIRCADENAS("";2;REPETIR(APILARV("Nombre completo";"Cumpleaños";"Salario";"Ventas")&"/";5));;"/");-1);c;MAP(B2:B6;C2:C6;LAMBDA(x;y;UNIRCADENAS(" ";VERDADERO;x;y)));c)
Creamos otra variable, usamos la funcion TEXTO, como argumento valor, seleccionamos el rango E2:E6, como argumento formato, entre comillas dobles, ponemos dd/mm/aaaa.
=LET(a; EXCLUIR(DIVIDIRTEXTO(REPETIR(CONCAT(A2:A6&"/");4);;"/");-1) ;b;EXCLUIR(DIVIDIRTEXTO(UNIRCADENAS("";2;REPETIR(APILARV("Nombre completo";"Cumpleaños";"Salario";"Ventas")&"/";5));;"/");-1);c;MAP(B2:B6;C2:C6;LAMBDA(x;y;UNIRCADENAS(" ";VERDADERO;x;y)));d;TEXTO(E2:E6;"dd/mm/aaaa");d)
Tenemos las fechas.
Creamos otra variable es la misma expresión que para la variable b, solo debemos de cambiar los nombres por Genero, Edad, y, Estado.
=LET(a;EXCLUIR(DIVIDIRTEXTO(REPETIR(CONCAT(A2:A6&"/");4);;"/");-1);b;EXCLUIR(DIVIDIRTEXTO(UNIRCADENAS("";2;REPETIR(APILARV("Nombre completo";"Cumpleaños";"Salario";"Ventas")&"/";5));;"/");-1);c;MAP(B2:B6;C2:C6;LAMBDA(x;y;UNIRCADENAS(" ";VERDADERO;x;y)));d;TEXTO(E2:E6;"dd/mm/aaaa");e;EXCLUIR(DIVIDIRTEXTO(UNIRCADENAS("";2;REPETIR(APILARV("Genero";"Edad";"Estado")&"/";5));;"/");-1);e)
Tenemos la columna atributo2.
Creamos otra variable, o, usamos el argumento calculo de LET, usamos APILARH, como argumento matriz1, ponemos la variable “a”, como argumento matriz2, usamos APILARV, como argumento matriz1, ponemos la variable “c”, como argumento matriz2, ponemos la variable “d”, como argumento matriz3, seleccionamos el rango G2:G6, como argumento matriz4, seleccionamos el rango I2:I6, cerramos paréntesis de APILARV, como argumento matriz3, ponemos la variable “b”, como argumento matriz4, ponemos la variable “e”, como argumento matriz5, ponemos APILARV, como argumento matriz1, seleccionamos el rango D2:D6, como argumento matriz2, seleccionamos el rango F2:F6, como argumento matriz3, seleccionamos el rango H2:H6, cerramos paréntesis.
=LET(a;EXCLUIR(DIVIDIRTEXTO(REPETIR(CONCAT(A2:A6&"/");4);;"/");-1);b;EXCLUIR(DIVIDIRTEXTO(UNIRCADENAS("";2;REPETIR(APILARV("Nombre completo";"Cumpleaños";"Salario";"Ventas")&"/";5));;"/");-1);c;MAP(B2:B6;C2:C6;LAMBDA(x;y;UNIRCADENAS(" ";VERDADERO;x;y)));d;TEXTO(E2:E6;"dd/mm/aaaa");e;EXCLUIR(DIVIDIRTEXTO(UNIRCADENAS("";2;REPETIR(APILARV("Genero";"Edad";"Estado")&"/";5));;"/");-1);f;APILARH(a;APILARV(c;d;G2:G6;I2:I6);b;e;APILARV(D2:D6;F2:F6;H2:H6));f)
Ya tenemos el modelo, pero, vemos que tenemos algunos errores.
Usamos la funcion SI.ERROR, y, ponemos blanco, si la funcion nos devuelve un error.
=LET(a;EXCLUIR(DIVIDIRTEXTO(REPETIR(CONCAT(A2:A6&"/");4);;"/");-1);b;EXCLUIR(DIVIDIRTEXTO(UNIRCADENAS("";2;REPETIR(APILARV("Nombre completo";"Cumpleaños";"Salario";"Ventas")&"/";5));;"/");-1);c;MAP(B2:B6;C2:C6;LAMBDA(x;y;UNIRCADENAS(" ";VERDADERO;x;y)));d;TEXTO(E2:E6;"dd/mm/aaaa");e;EXCLUIR(DIVIDIRTEXTO(UNIRCADENAS("";2;REPETIR(APILARV("Genero";"Edad";"Estado")&"/";5));;"/");-1);f;SI.ERROR(APILARH(a;APILARV(c;d;G2:G6;I2:I6);b;e;APILARV(D2:D6;F2:F6;H2:H6));"");f)
Aceptamos, y, ya lo tenemos.
Miguel Angel Franco


















Comentarios