top of page

Invertir filas y columnas

Tenemos el siguiente modelo.


Debemos de invertir tanto filas como columnas.


Empecemos…


En la celda G2, usamos LET, creamos una variable, seleccionamos el rango A2:E5.


=LET(xx;A2:E5

 

Creamos otra variable, usamos funcion MAP, como argumento array, ponemos la variable “xx”, ya sabemos que va a trabajar con cada fila de forma independiente, como argumento funcion, ponemos LAMBDA, y, declaramos una variable.


=LET(xx;A2:E5;b;MAP(xx;LAMBDA(x


Como argumento cálculo de LAMBDA, usamos la funcion FILA, como argumento referencia, ponemos la variable “x”.


=LET(xx;A2:E5;b;MAP(xx;LAMBDA(x;FILA(x)));b)

 

Probamos variable, y, tenemos una matriz desbordada de cinco columnas, y, cuatro filas con el numero de fila de cada fila de datos.


Nos quedamos con los valores únicos, para ello, antes de MAP, usamos UNICOS, como argumento matriz es la funcion MAP, como argumento by_col, seleccionamos devolver columnas únicas.


=LET(xx;A2:E5;b;UNICOS(MAP(xx;LAMBDA(x;FILA(x)));VERDADERO);b)

 

Tenemos las filas únicas.


Ordenamos, para ello, antes de UNICOS, usamos la funcion ORDENAR, como argumento matriz es la funcion UNICOS, omitimos el argumento ordenar índice, como argumento criterio ordenación, seleccionamos descendente.


=LET(xx;A2:E5;b;ORDENAR(UNICOS(MAP(xx;LAMBDA(x;FILA(x)));VERDADERO);;-1);b)


Tenemos las filas únicas ordenadas de mayor a menor.


Creamos otra variable, copiamos la expresión de la variable “b”, y, la pegamos para la nueva expresión, debemos de cambiar el argumento by_col de la funcion UNICOS a FALSO, es decir, devolver filas únicas, y, añadimos el argumento por col de la funcion ORDENAR a VERDADERO, es decir, ordenar por columna.


=LET(xx;A2:E5;b;ORDENAR(UNICOS(MAP(xx;LAMBDA(x;FILA(x)));VERDADERO);;-1);c;ORDENAR(UNICOS(MAP(xx;LAMBDA(x;COLUMNA(x)));FALSO);;-1;VERDADERO);c)


Tenemos en horizontal los números de columnas ordenados de mayor a menor.


Usamos el argumento calculo de LET, usamos la funcion INDICE, como argumento matriz, seleccionamos las columnas A:E, como argumento numero de fila, ponemos la variable “b”, como argumento número de columna, ponemos la variable “c”.


=LET(xx;A2:E5;b;ORDENAR(UNICOS(MAP(xx;LAMBDA(x;FILA(x)));VERDADERO);;-1);c;ORDENAR(UNICOS(MAP(xx;LAMBDA(x;COLUMNA(x)));FALSO);;-1;VERDADERO);INDICE(A:E;b;c))

 

Aceptamos, y, ya lo tenemos.


También, podemos hacerlo de la siguiente manera.


En la celda M2, esta parte es la misma que para el ejemplo anterior.


=LET(xx;A2:E5


Creamos otra variable, usamos la funcion MAP, como argumento array, ponemos la variable “xx”, como argumento funcion, ponemos LAMBDA, y, declaramos una variable.


=LET(xx;A2:E5;b;MAP(xx;LAMBDA(x

 

Como argumento cálculo de LAMBDA, usamos la función FILA, como argumento referencia, ponemos la variable “x”, concatenamos con un espacio, concatenamos con la funcion COLUMNA, como argumento referencia, volvemos a poner la variable “x”.


=LET(xx;A2:E5;b;MAP(xx;LAMBDA(x;FILA(x)& " " &COLUMNA(x)));b)

 

Tenemos una matriz desbordada de 5x4, donde en cada celda tenemos la fila y la columna de cada valor.


Creamos otra variable, usamos la funcion APILARH, como argumento matriz1, usamos la funcion TEXTOANTES, como argumento texto, ponemos la variable “b”, como argumento delimitador, ponemos un espacio.


=LET(xx;A2:E5;b;MAP(xx;LAMBDA(x;FILA(x)& " " &COLUMNA(x)));c;APILARH(TEXTOANTES(b;" ")


Como argumento matriz2, usamos la funcion TEXTODESPUES, como argumento texto, ponemos la variable “b”, como argumento delimitador, entre comillas dobles, ponemos un espacio.


Cerramos paréntesis.


=LET(xx;A2:E5;b;MAP(xx;LAMBDA(x;FILA(x)& " " &COLUMNA(x)));c;APILARH(TEXTOANTES(b;" ");TEXTODESPUES(b;" "));c)


Tenemos una matriz 10x4, donde tenemos repetidos tanto las filas como las columnas.


Creamos otra variable, usamos la funcion UNICOS, como argumento matriz, ponemos la variable “c”, como argumento by col, seleccionamos devolver columnas únicas.


=LET(xx;A2:E5;b;MAP(xx;LAMBDA(x;FILA(x)& " " &COLUMNA(x)));c;APILARH(TEXTOANTES(b;" ");TEXTODESPUES(b;" "));d;UNICOS(c;VERDADERO);d)

 

Tenemos los números de filas únicos, y, después de cada fila los números de columnas.


Como argumento calculo de LET, usamos la funcion INDICE, como argumento matriz, seleccionamos las columnas A:E, como argumento numero de fila, vamos a tomar la columna 1 de la variable “d”, que son los números de filas, y, ordenamos de manera descendente, para ello, usamos la funcion ORDENAR, como argumento matriz, usamos la funcion TOMAR, como argumento matriz, ponemos la variable “d”, omitimos el argumento filas, como argumento columnas, ponemos 1, seguimos con la funcion ORDENAR, omitimos el argumento ordenar índice, como argumento criterio ordenación, seleccionamos descendente.


=LET(xx;A2:E5;b;MAP(xx;LAMBDA(x;FILA(x)& " " &COLUMNA(x)));c;APILARH(TEXTOANTES(b;" ");TEXTODESPUES(b;" "));d;UNICOS(c;VERDADERO);INDICE(A:E;ORDENAR(TOMAR(d;;1);;-1)


Como argumento numero de columna, vamos a tomar las columnas 2,3,4,5, y 6 de la variable “d”, y, ordenamos de manera descendente, para ello, usamos la funcion ORDENAR, como argumento matriz, usamos la funcion ELEGIRCOLS, como argumento matriz, ponemos la variable “d”, como argumento numero de columna1, usamos una constante de matriz, por lo que abrimos unas llaves, ponemos los números 2, 3, 4, 5, y, 6, como delimitador, ponemos la barra inclinada, cerramos llaves, cerramos paréntesis, omitimos el argumento ordenar índice, como argumento criterio ordenación, seleccionamos descendente, como argumento por col, seleccionamos ordenar por columnas.


=LET(xx;A2:E5;b;MAP(xx;LAMBDA(x;FILA(x)& " " &COLUMNA(x)));c;APILARH(TEXTOANTES(b;" ");TEXTODESPUES(b;" "));d;UNICOS(c;VERDADERO);INDICE(A:E;ORDENAR(TOMAR(d;;1);;-1);ORDENAR(ELEGIRCOLS(d;{2\3\4\5\6});;-1;VERDADERO)))

 

Aceptamos, y, ya lo tenemos.


Vamos a hacerlo de una forma mas corta, en la celda S2, usamos LET, creamos una variable, seleccionamos el rango A2:E5.


=LET(xx;A2:E5


Creamos otra variable, usamos la funcion ELEGIRFILAS, como argumento matriz, ponemos la variable “xx”, como argumento número de fila1, usamos la funcion SECUENCIA, como argumento filas, ponemos 4, que son las filas que tenemos, omitimos el argumento columnas, como argumento inicio, ponemos 4, como argumento paso, ponemos -1, para que cuente hacia atrás.


Cerramos paréntesis.


Probamos variable.


=LET(xx;A2:E5;a;ELEGIRFILAS(xx;SECUENCIA(4;;4;-1));a)


Tenemos una columna desbordada de 5x4, donde tenemos las filas al revés.


Como argumento cálculo de LET, usamos la funcion ELEGIRCOLS, como argumento matriz, ponemos la variable “a”, como argumento número de columna1, usamos la funcion SECUENCIA, omitimos el argumento filas, como argumento columnas, ponemos 5, que son las columnas que tenemos, como argumento inicio, ponemos 5, como argumento paso, ponemos -1.


=LET(xx;A2:E5;a;ELEGIRFILAS(xx;SECUENCIA(4;;4;-1));ELEGIRCOLS(a;SECUENCIA(;5;5;-1)))

 

Aceptamos, y, ya lo tenemos.



Miguel Angel Franco

 
 
 

Comentarios


© 2019 Miguel Ángel Franco García

bottom of page