COMO PUEDO PASAR LOS DATOS DE UNA MATRIZ A SOLO UNA COLUMNA??
En esta nota veremos como hacerlo, no sólo cómo poner todos los datos de una matriz en una sola columna, sino también en una sola fila.
Actualización: mucho más fácil y eficiente hacerlo con Power Query; ver este post
Empecemos por plantearnos una matriz, que por comodidad, será de tres fila por tres columnas
Nuestro objetivo es crear una columna que contenga todos los elementos de la matriz
Mi primer paso fue decidir si hacerlo con fórmulas o con macros. Decidí hacerlo con fórmulas.
El archivo con las fórmulas puede descargarse aquí.
De todas las funciones la que me pareció más apropiada es DESREF. Como ya hemos explicado en el pasado, esta función tiene cinco argumentos
En este caso, nuestro "ancla" será toda la matriz, el rango A1:C3. Este rango lo definimos en un nombre, "matriz", para mayor comodidad.
Para obtener el primer elemento de la matriz usamos la fórmula
=DESREF(matriz;0;0;1;1)
Para poner el segundo elemento de la matriz en la columna usamos la fórmula
=DESREF(matriz;1;0;1;1)
A esta altura de los acontecimientos está claro que nuestra fórmula tiene que cambiar en forma dinámica el argumento de la fila y de la columna. Es decir, una fórmula que a medida que la copiamos a lo largo de una columna, vaya generando en forma dinámica los elementos de la matriz.
Para resolver el número de fila usaremos esta fórmula
=RESIDUO(FILA()-FILA($E$2);FILAS(matriz))
Esta fórmula produce estos resultados
Usamos $E$2 como argumento ya que en esa celda empezará nuestra columna.
Ahora tenemos que lograr que el argumento de la columna cambie de 1 a 3, en nuestro caso, cada tres filas. Para esto usaremos la fórmula
=TRUNCAR((FILA()-FILA($E$2))/FILAS(matriz))
Los resultados de esta fórmula son
A los argumentos de alto y ancho de DESREF les damos un valor de 1. Finalmente, nuestra fórmula será
=DESREF(matriz;RESIDUO(FILA()-FILA($E$2);FILAS(matriz));TRUNCAR((FILA()-FILA($E$2))/FILAS(matriz));1;1)
En nuestro ejemplo empezamos la columna en la celda E2 y obtenemos este resultado
Esta fórmula copia los elementos de la matriz primero por columna y luego por fila. Si queremos copias los elementos primero por fila y luego por columna, usamos la fórmula anterior modificada de la siguiente manera
=DESREF(matriz;TRUNCAR((FILA()-FILA($E$2))/COLUMNAS(matriz));RESIDUO(FILA()-FILA($E$2);COLUMNAS(matriz));1;1)
Si queremos copiar los elementos de la matriz a lo largo de una fila tendremos que usar esta fórmula
=DESREF(matriz;TRUNCAR((COLUMNA()-COLUMNA($B$13))/COLUMNAS(matriz));RESIDUO((COLUMNA()-COLUMNA($B$13));COLUMNAS(matriz));1;1)
para copiar por columna y luego por fila, o ésta para copiar primero por fila y luego por columna
=DESREF(matriz;RESIDUO((COLUMNA()-COLUMNA($B$14));FILAS(matriz));TRUNCAR((COLUMNA()-COLUMNA($B$14))/(FILAS(matriz)));1;1)
Esta nota está basada en las fórmulas desarrolladas por Chip Pearson.
Technorati Tags: MS Excel