Tabla de contenido
La forma más rápida de transformar una columna o fila de valores en una matriz bidimensional es utilizar la función WRAPCOLS o WRAPROWS.
Desde los primeros días de Excel, ha sido muy bueno para calcular y analizar números. Pero manipular matrices ha sido tradicionalmente un reto. La introducción de matrices dinámicas hizo el uso de fórmulas de matrices mucho más fácil. Y ahora, Microsoft está lanzando un conjunto de nuevas funciones de matrices dinámicas para manipular y remodelar matrices. Este tutorial le enseñará cómo utilizar dos de estas funciones,WRAPCOLS y WRAPROWS, para transformar una columna o fila en una matriz 2D en un abrir y cerrar de ojos.
Función WRAPCOLS de Excel
La función WRAPCOLS de Excel transforma una fila o columna de valores en una matriz bidimensional basada en el número especificado de valores por fila.
La sintaxis tiene los siguientes argumentos:
WRAPCOLS(vector, wrap_count, [pad_with])Dónde:
- vector (obligatorio) - la matriz o rango unidimensional de origen.
- wrap_count (obligatorio) - el número máximo de valores por columna.
- pad_con (opcional) - el valor a rellenar con la última columna si no hay suficientes elementos para llenarla. Si se omite, los valores que falten se rellenarán con #N/A (por defecto).
Por ejemplo, para cambiar el rango B5:B24 a una matriz bidimensional con 5 valores por columna, la fórmula es:
=WRAPROWS(B5:B24, 5)
La fórmula se introduce en una sola celda y se extiende automáticamente a tantas celdas como sea necesario. En la salida WRAPCOLS, los valores se ordenan verticalmente, de arriba a abajo, en función de la fórmula wrap_count Una vez alcanzado el recuento, se inicia una nueva columna.
Función WRAPROWS de Excel
La función WRAPROWS de Excel convierte una fila o columna de valores en una matriz bidimensional en función del número de valores por fila que se especifique.
La sintaxis es la siguiente:
WRAPROWS(vector, wrap_count, [pad_with])Dónde:
- vector (obligatorio) - la matriz o rango unidimensional de origen.
- wrap_count (obligatorio) - el número máximo de valores por fila.
- pad_con (opcional) - el valor a rellenar con la última fila si no hay suficientes elementos para llenarla. El valor por defecto es #N/A.
Por ejemplo, para transformar el rango B5:B24 en una matriz 2D con 5 valores en cada fila, la fórmula es:
=WRAPROWS(B5:B24, 5)
La fórmula se introduce en la celda superior izquierda del intervalo de derrames y se rellenan automáticamente todas las demás celdas. La función WRAPROWS ordena los valores horizontalmente, de izquierda a derecha, basándose en la fórmula wrap_count Una vez alcanzado el recuento, se inicia una nueva fila.
Disponibilidad de WRAPCOLS y WRAPROWS
Ambas funciones solo están disponibles en Excel para Microsoft 365 (Windows y Mac) y Excel para la web.
En versiones anteriores, puede utilizar fórmulas tradicionales más complejas para realizar transformaciones de columna a matriz y de fila a matriz. Más adelante en este tutorial, trataremos en detalle las soluciones alternativas.
Consejo: para realizar una operación inversa, es decir, cambiar una matriz 2D a una sola columna o fila, utilice la función TOCOL o TOROW, respectivamente.
Cómo convertir columna / fila a rango en Excel - ejemplos
Ahora que ya conoces los usos básicos, vamos a ver algunos casos más concretos.
Fijar el número máximo de valores por columna o fila
Dependiendo de la estructura de sus datos originales, puede que le convenga reorganizarlos en columnas (WRAPCOLS) o en filas (WRAPROWS). Sea cual sea la función que utilice, es la wrap_count que determina el número máximo de valores en cada columna/fila.
Por ejemplo, para transformar el rango B4:B23 en una matriz 2D, de forma que cada columna tenga un máximo de 10 valores, utilice esta fórmula:
=WRAPCOLS(B4:B23, 10)
Para reordenar el mismo rango por filas, de forma que cada fila tenga un máximo de 4 valores, la fórmula es:
=WRAPROWS(B4:B23, 4)
La imagen de abajo muestra cómo se ve esto:
Rellenar los valores que faltan en la matriz resultante
En caso de que no haya valores suficientes para llenar todas las columnas/filas del rango resultante, WRAPROWS y WRAPCOLS devolverán errores #N/A para mantener la estructura del array 2D.
Para cambiar el comportamiento predeterminado, puede proporcionar un valor personalizado para el parámetro opcional pad_con argumento.
Por ejemplo, para transformar el rango B4:B21 en una matriz 2D con un máximo de 5 valores de ancho, y rellenar la última fila con guiones si no hay suficientes datos para llenarla, utilice esta fórmula:
=WRAPROWS(B4:B21, 5, "-")
Para sustituir los valores que faltan por cadenas de longitud cero (espacios en blanco), la fórmula es:
=WRAPROWS(B4:B21, 5, "")
Compare los resultados con el comportamiento por defecto (fórmula en D5) donde pad_con se omite:
Fusionar varias filas en un rango 2D
Para combinar varias filas separadas en una única matriz 2D, primero se apilan las filas horizontalmente utilizando la función HSTACK y, a continuación, se envuelven los valores utilizando WRAPROWS o WRAPCOLS.
Por ejemplo, para combinar los valores de 3 filas (B5:J5, B7:G7 y B9:F9) y envolverlos en columnas, cada una con 10 valores, la fórmula es:
=WRAPCOLS(HSTACK(B5:J5, B7:G7, B9:F9), 10)
Para combinar valores de varias filas en un rango 2D en el que cada fila contiene 5 valores, la fórmula adopta esta forma:
=WRAPROWS(HSTACK(B5:J5, B7:G7, B9:F9), 5)
Combinar varias columnas en una matriz 2D
Para fusionar varias columnas en un rango 2D, primero hay que apilarlas verticalmente mediante la función VSTACK y, a continuación, envolver los valores en filas (WRAPROWS) o columnas (WRAPCOLS).
Por ejemplo, para combinar los valores de 3 columnas (B5:J5, B7:G7 y B9:F9) en un rango 2D donde cada columna contiene 10 valores, la fórmula es:
=WRAPCOLS(HSTACK(B5:J5, B7:G7, B9:F9), 10)
Para combinar las mismas columnas en un rango 2D en el que cada fila contenga 5 valores, utilice esta fórmula:
=WRAPROWS(HSTACK(B5:J5, B7:G7, B9:F9), 5)
Envolver y ordenar la matriz
Si el rango de origen tiene valores en orden aleatorio y desea que la salida esté ordenada, proceda del siguiente modo:
- Ordena el array inicial como quieras utilizando la función SORT.
- Suministre la matriz ordenada a WRAPCOLS o WRAPROWS.
Por ejemplo, para envolver el rango B4:B23 en filas, con 4 valores en cada una, y ordenar el rango resultante de la A a la Z, construya una fórmula como ésta:
=WRAPROWS(SORT(B4:B23), 4)
Para envolver el mismo rango en columnas, 10 valores en cada una, y ordenar la salida alfabéticamente, la fórmula es:
=WRAPCOLS(SORT(B4:B23), 10)
Los resultados son los siguientes:
Consejo: para ordenar los valores de la matriz resultante en orden descendente , establezca el tercer argumento ( ordenar ) de la función SORT a -1.
WRAPCOLS alternativa para Excel 365 - 2010
En versiones antiguas de Excel donde la función WRAPCOLS no está soportada, puedes construir tu propia fórmula para envolver los valores de un array unidimensional en columnas. Esto se puede hacer utilizando 5 funciones diferentes juntas.
Alternativa WRAPCOLS para convertir una fila en un rango 2D:
IFERROR(IF(ROW(A1)> n , "", INDEX( rango_filas , , FILA(A1) + (COLUMNA(A1)-1)* n )), "")Alternativa WRAPCOLS para convertir una columna en un rango 2D:
IFERROR(IF(ROW(A1)> n , "", INDEX( rango_columnas , FILA(A1) + (COLUMNA(A1)-1)* n )), "")Dónde n es el número máximo de valores por columna.
En la imagen siguiente, utilizamos la siguiente fórmula para convertir un rango de una fila (D4:J4) en un array de tres filas.
=IFERROR(IF(ROW(A1)>3, "", INDEX($D$4:$J$4, , ROW(A1) + (COLUMN(A1)-1)*3)), "")
Y esta fórmula cambia un rango de una columna (B4:B20) en un array de cinco filas:
=IFERROR(IF(ROW(A1)>5, "", INDEX($B$4:$B$20, ROW(A1) + (COLUMN(A1)-1)*5)), "")
Las soluciones anteriores emulan las fórmulas WRAPCOLS análogas y producen los mismos resultados:
=WRAPCOLS(D4:J4, 3, "")
y
=WRAPCOLS(B4:B20, 5, "")
Tenga en cuenta que, a diferencia de la función WRAPCOLS de matriz dinámica, las fórmulas tradicionales siguen el enfoque de una fórmula y una celda. Así, nuestra primera fórmula se introduce en D8 y se copia 3 filas hacia abajo y 3 columnas hacia la derecha. La segunda fórmula se introduce en D14 y se copia 5 filas hacia abajo y 4 columnas hacia la derecha.
Cómo funcionan estas fórmulas
En el corazón de ambas fórmulas, utilizamos la función INDEX que devuelve un valor de la matriz suministrada basado en un número de fila y columna:
INDEX(matriz, fila_num, [columna_num])Como se trata de un array de una fila, podemos omitir el parámetro número_de_fila por defecto es 1. El truco está en hacer que col_num calculado automáticamente para cada celda en la que se copia la fórmula. Y así es como lo hacemos:
FILA(A1)+(COLUMNA(A1)-1)*3)
La función ROW devuelve el número de fila de la referencia A1, que es 1.
La función COLUMNA devuelve el número de columna de la referencia A1, que también es 1. Restando 1 se convierte en cero. Y multiplicando 0 por 3 da 0.
Entonces, sumas 1 devuelto por ROW y 0 devuelto por COLUMN y obtienes 1 como resultado.
De este modo, la fórmula INDEX de la celda superior izquierda del rango de destino (D8) sufre esta transformación:
INDEX($D$4:$J$4, ,FILA(A1) + (COLUMNA(A1)-1)*3))
cambios en
INDEX($D$4:$J$4, ,1)
y devuelve el valor de la 1ª columna de la matriz especificada, que es "Manzanas" en D4.
Cuando la fórmula se copia en la celda D9, las referencias relativas de celda cambian en función de una posición relativa de filas y columnas, mientras que la referencia absoluta de rango no cambia:
INDEX($D$4:$J$4,, FILA(A2)+(COLUMNA(A2)-1)*3))
se convierte en:
INDEX($D$4:$J$4,, 2+(1-1)*3))
se convierte:
INDEX($D$4:$J$4,, 2))
y devuelve el valor de la 2ª columna de la matriz especificada, que es "Albaricoques" en E4.
La función IF comprueba el número de filas y si es mayor que el número de filas especificado (3 en nuestro caso) devuelve una cadena vacía (""), en caso contrario el resultado de la función INDEX:
IF(ROW(A1)>3, "", INDEX(...))
Por último, la función IFERROR corrige un error #REF! que se produce cuando la fórmula se copia en más celdas de las realmente necesarias.
La segunda fórmula que convierte una columna en un rango 2D funciona con la misma lógica. La diferencia es que se utiliza la combinación FILA + COLUMNA para averiguar el número_de_fila El argumento col_num no es necesario en este caso, ya que sólo hay una columna en la matriz de origen.
WRAPROWS alternativa para Excel 365 - 2010
Para envolver los valores de una matriz unidimensional en filas en Excel 2019 y versiones anteriores, puede utilizar las siguientes alternativas a la función WRAPROWS.
Transforma una fila en un rango 2D:
IFERROR(IF(COLUMNA(A1)> n , "", INDEX( rango_filas , , COLUMNA(A1)+(FILA(A1)-1)* n )), "")Cambiar una columna a rango 2D:
IFERROR(IF(COLUMNA(A1)> n , "", INDEX( rango_columnas , COLUMNA(A1)+(FILA(A1)-1)* n )), "")Dónde n es el número máximo de valores por fila.
En nuestro conjunto de datos de ejemplo, utilizamos la siguiente fórmula para convertir un rango de una fila (D4:J4) en un rango de tres columnas. La fórmula se sitúa en la celda D8 y, a continuación, se copia a lo largo de 3 columnas y 3 filas.
=IFERROR(IF(COLUMN(A1)>3, "", INDEX($D$4:$J$4, , COLUMN(A1)+(ROW(A1)-1)*3)), "")
Para transformar un rango de 1 columna (B4:B20) en un rango de 5 columnas, introduce la siguiente fórmula en D14 y arrástrala a través de 5 columnas y 4 filas.
=IFERROR(IF(COLUMN(A1)>5, "", INDEX($B$4:$B$20, COLUMN(A1)+(ROW(A1)-1)*5)), "")
En Excel 365, se pueden obtener los mismos resultados con las fórmulas WRAPCOLS equivalentes:
=WRAPROWS(D4:J4, 3, "")
y
=WRAPROWS(B4:B20, 5, "")
Cómo funcionan estas fórmulas
Esencialmente, estas fórmulas funcionan como en el ejemplo anterior. La diferencia está en cómo se determina el número_de_fila y col_num coordenadas para la función INDEX:
INDEX($D$4:$J$4,, COLUMNA(A1)+(FILA(A1)-1)*3))
Para obtener el número de columna de la celda superior izquierda del rango de destino (D8), se utiliza esta expresión:
COLUMNA(A1)+(FILA(A1)-1)*3)
que cambia a:
1+(1-1)*3
y da 1.
Como resultado, la fórmula siguiente devuelve el valor de la primera columna de la matriz especificada, que es "Manzanas":
INDEX($D$4:$J$4,, 1)
Hasta aquí, el resultado es el mismo que en el ejemplo anterior. Pero veamos qué ocurre en otras celdas...
En la celda D9, las referencias relativas de celda cambian como sigue:
INDEX($D$4:$J$4,, COLUMNA(A2)+(FILA(A2)-1)*3))
Así, la fórmula se transforma en:
INDEX($D$4:$J$4,, 1+(2-1)*3))
se convierte:
INDEX($D$4:$J$4,, 4))
y devuelve el valor de la 4ª columna de la matriz especificada, que es "Cerezas" en G4.
La función IF comprueba el número de columnas y, si es mayor que el número de columnas especificado, devuelve una cadena vacía (""); en caso contrario, el resultado de la función INDEX:
IF(COLUMN(A1)>3, "", INDEX(...))
Como toque final, IFERROR evita que aparezcan errores #REF! en celdas "extra" si copias la fórmula en más celdas de las realmente necesarias.
La función WRAPCOLS o WRAPROWS no funciona
Si las funciones de "envoltura" no están disponibles en su Excel o dan lugar a un error, lo más probable es que se trate de una de las siguientes razones.
#Error
En Excel 365, puede producirse un error #NAME? porque ha escrito mal el nombre de la función. En otras versiones, indica que las funciones no son compatibles. Como solución alternativa, puede utilizar la alternativa WRAPCOLS o la alternativa WRAPROWS.
#Error
Se produce un error #VALUE si vector no es un array unidimensional.
¡Error #NUM!
Se produce un error #NUM si wrap_count es 0 o un número negativo.
#Error
La mayoría de las veces, un error #SPILL indica que no hay suficientes celdas en blanco en las que verter los resultados. Borra las celdas vecinas y desaparecerá. Si el error persiste, consulta qué significa #SPILL en Excel y cómo solucionarlo.
Así es como se utilizan las funciones WRAPCOLS y WRAPROWS para convertir un rango unidimensional en un array bidimensional en Excel. Gracias por leer y ¡espero verte en nuestro blog la semana que viene!
Cuaderno de prácticas para descargar
Funciones WRAPCOLS y WRAPROWS - ejemplos (archivo .xlsx)