Transponer modelo
- Jaime Franco Jimenez

- 13 nov 2023
- 2 Min. de lectura
Tenemos los siguientes datos, donde tenemos diferentes materias, cada materia tiene asignada una clase, y, marcas para dicha materias y clases.
Debemos de transponerla tabla, es decir, en vertical en una primera columna deben de aparecer las clases, en una segunda columna, las materias, y, en una tercera columna las marcas para cada materia.
Empecemos…
En la celda L2, usamos LET, creamos una variable, usamos la funcion ENFILA, como argumento matriz, seleccionamos el rango A1:E1, los encabezados de materias.
Probamos variable.
=LET(a;ENFILA(A1:E1);a)
Tenemos los encabezados de materias en horizontal.
Creamos otra variable, usamos el condicional SI, como argumento prueba lógica, seleccionamos el rango A1:E1 e igualamos a la variable “a”, como argumento valor si verdadero, seleccionamos el rango A2:E5, omitimos el argumento valor si falso.
=LET(a;ENFILA(A1:E1);b;SI(A1:E1=a;A2:E5);b)
Obtenemos una matriz desbordada de cinco columnas, cada columna pertenece a una materia, y, cuelga las clases correspondientes.
Creamos otra variable, volvemos a usar el condicional SI, como argumento prueba lógica, seleccionamos el rango A1:E1, como argumento valor si verdadero, seleccionamos el rango F2:J5, omitimos el argumento valor si falso.
=LET(a;ENFILA(A1:E1);b;SI(A1:E1=a;A2:E5;NOD());c;SI(A1:E1=a;F2:J5);c)
Volvemos a obtener una matriz desbordada de cinco columnas, pero, en este caso, obtenemos las marcas para cada materia y clase.
Creamos otra variable, usamos la funcion FILTRAR, como argumento array, ponemos la funcion ENCOL, y, como argumento ponemos la variable “b”, como argumento Include, volvemos a poner ENCOL y comparamos con distinto a cero.
=LET(a;ENFILA(A1:E1);b;SI(A1:E1=a;A2:E5;NOD());c;SI(A1:E1=a;F2:J5);clases;FILTRAR(ENCOL(b);ENCOL(b)<>0);clases)
Tenemos las clases.
Creamos otra variable, volvemos a usar la funcion FILTRAR, como argumento array, ponemos ENCOL como argumento ponemos la variable “c”, como argumento Include, volvemos a poner ENCOL, y, comparamos con distinto a cero.
=LET(a;ENFILA(A1:E1);b;SI(A1:E1=a;A2:E5;NOD());c;SI(A1:E1=a;F2:J5);clases;FILTRAR(ENCOL(b);ENCOL(b)<>0);marcas;FILTRAR(ENCOL(c );ENCOL(c )<>0);marcas)
Tenemos las marcas.
Creamos otra variable, y, nos traemos los valores únicos de la variable “clases”.
=LET(a;ENFILA(A1:E1);b;SI(A1:E1=a;A2:E5;NOD());c;SI(A1:E1=a;F2:J5);clases;FILTRAR(ENCOL(b);ENCOL(b)<>0);marcas;FILTRAR(ENCOL(c );ENCOL(c )<>0);d;UNICOS(clases);d)
Creamos otra variable, usamos ENCOL, como argumento matriz, usamos el condicional SI, como argumento prueba lógica, seleccionamos el rango A2:E5, e, igualamos a la variable “d”, como argumento valor si verdadero, seleccionamos el rango A1:E1, como argumento valor si falso, ponemos un error.
=LET(a;ENFILA(A1:E1);b;SI(A1:E1=a;A2:E5;NOD());c;SI(A1:E1=a;F2:J5);clases;FILTRAR(ENCOL(b);ENCOL(b)<>0);marcas;FILTRAR(ENCOL(c );ENCOL(c )<>0);d;UNICOS(clases);materias;ENCOL(SI(A2:E5=d;A1:E1;NOD());3);materias)
Tenemos las materias.
Usamos el argumento cálculo de LET, usamos APILARH, como argumento matriz1, ponemos la variable “clases”, como argumento matriz2, ponemos la variable “materias”, como argumento matriz3, ponemos la variable “marcas”.
=LET(a;ENFILA(A1:E1);b;SI(A1:E1=a;A2:E5;NOD());c;SI(A1:E1=a;F2:J5);clases;FILTRAR(ENCOL(b);ENCOL(b)<>0);marcas;FILTRAR(ENCOL(c );ENCOL(c )<>0);d;UNICOS(clases);materias;ENCOL(SI(A2:E5=d;A1:E1;NOD());3);APILARH(clases;materias;marcas))
Aceptamos y ya lo tenemos.
Miguel Angel Franco













Comentarios