Tabla de contenido
Una forma sencilla de transformar una matriz o rango en una columna con la función TOCOL.
La capacidad de transponer datos de columnas a filas y a la inversa existe en Excel desde hace bastante tiempo. Pero convertir un rango de celdas en una sola columna era una tarea complicada de resolver. Ahora, por fin, eso está cambiando. Microsoft ha introducido una nueva función, llamada TOCOL, que puede hacer una transformación de matriz a columna en un abrir y cerrar de ojos. A continuación se muestra una lista de tareas que esta nueva función puede resolver fácilmente.
Función TOCOL de Excel
La función TOCOL de Excel convierte una matriz o rango de celdas en una sola columna.
La función toma tres argumentos, pero sólo se requiere el primero.
TOCOL(array, [ignorar], [escanear_por_columna])Dónde:
Matriz (obligatorio) - una matriz o rango para transformar en una columna.
Ignore (opcional) - define si se deben ignorar los espacios en blanco o/y los errores. Puede ser uno de estos valores:
- 0 u omitido (por defecto) - mantener todos los valores
- 1 - ignorar los espacios en blanco
- 2 - ignorar errores
- 3 - ignorar los espacios en blanco y los errores
Escanear_por_columna (opcional) - determina si se escanea la matriz horizontal o verticalmente:
- FALSE u omitido (por defecto) - escanear el array por filas de izquierda a derecha.
- TRUE - escanea el array por columnas de arriba a abajo.
Consejos:
- Para convertir una matriz en una sola fila, utilice la función TOROW.
- Para realizar la transformación inversa de columna a fila, utilice la función WRAPCOLS para envolver por columna o la función WRAPROWS para envolver por fila.
- Para transponer una matriz de horizontal a vertical o viceversa, es decir, cambiar filas por columnas, utilice la función TRANSPOSE.
Disponibilidad de TOCOL
TOCOL es una nueva función, compatible con Excel para Microsoft 365 (para Windows y Mac) y Excel para la web.
Fórmula básica TOCOL para transformar rango en columna
La fórmula TOCOL, en su forma más sencilla, sólo requiere un argumento - matriz Por ejemplo, para colocar una matriz bidimensional formada por 3 columnas y 4 filas en una sola columna, la fórmula es:
=TOCOL(A2:C5)
La fórmula se introduce sólo en una celda (E2 en este ejemplo) y se derrama en las celdas de abajo automáticamente. En términos de Excel, el resultado se llama rango de derrame.
Cómo funciona esta fórmula:
Técnicamente, el rango A2:C5 se convierte primero en una matriz bidimensional. Observe las filas separadas por punto y coma y las columnas delimitadas por comas:
{"Apple","Banana","Cherry";1,0,3;4,#N/A,6;7,8,9}
La función TOCOL recorre la matriz de izquierda a derecha y la transforma en una matriz vertical unidimensional:
{"Apple";"Banana";"Cherry";1;0;3;4;#N/A;6;7;8;9}
El resultado se coloca en la celda E2, desde la que se vierte a las celdas inferiores.
Cómo utilizar la función TOCOL en Excel - ejemplos de fórmulas
Para comprender mejor las posibilidades de la función TOCOL y las tareas que puede cubrir, veamos algunos ejemplos de fórmulas.
Transformar matriz en columna ignorando espacios en blanco y errores
Como habrá observado en el ejemplo anterior, la fórmula TOCOL por defecto conserva todos los valores de la matriz de origen, incluidas las celdas en blanco y los errores.
En la matriz resultante, las celdas vacías se representan con ceros, lo que puede resultar bastante confuso, sobre todo si la matriz original tiene valores 0. La solución es saltar espacios en blanco Para ello, el segundo argumento es 1:
=PROTOCOLO(A2:C5, 1)
A ignorar errores establece el segundo argumento en 2:
=PROTOCOLO(A2:C5, 2)
Para excluir a ambos, espacios en blanco y errores utilice 3 para el ignore argumento:
=PROTOCOLO(A2:C5, 3)
Explorar el array horizontal o verticalmente
Con el valor por defecto escanear_por_columna (FALSE u omitido), la función TOCOL escanea la matriz horizontalmente por filas. Para procesar valores por columnas, establezca este argumento en TRUE o 1. Por ejemplo:
=PROTOCOLO(A2:C5, ,TRUE)
Observe que, en ambos casos, las matrices devueltas tienen el mismo tamaño, pero los valores están dispuestos en un orden diferente.
Combinar varios rangos en una columna
Si se trata de varios rangos no contiguos, primero puede combinar los rangos verticalmente en un único array con la ayuda de la función VSTACK y, a continuación, utilizar TOCOL para transformar el array combinado en una columna.
Suponiendo que el primer rango es A2:C4 y el segundo rango es A8:C9, la fórmula tiene esta forma:
=PROTOCOLO(VSTACK(A2:C4, A8:C9))
Esta fórmula demuestra el comportamiento por defecto - lee las matrices combinadas horizontalmente de izquierda a derecha como se muestra en la columna E de la imagen de abajo.
Para leer los valores verticalmente de arriba a abajo, el tercer argumento de TOCOL debe ser TRUE:
=TOCOLO(VSTACK(A2:C4, A8:C9), ,TRUE)
Preste atención a que, en este caso, la fórmula devuelve primero los valores de la columna A de ambas matrices, luego los de la columna B, y así sucesivamente. La razón es que TOCOL escanea una única matriz apilada, no los rangos individuales originales.
Si su lógica de negocio requiere apilar los rangos originales horizontalmente en lugar de verticalmente, entonces utilice la función HSTACK en lugar de VSTACK.
Para añadir cada matriz posterior a la derecha de la matriz anterior y leer las matrices combinadas horizontalmente, la fórmula es:
=PROTOCOLO(HSTACK(A2:C4, A8:C10))
Para añadir cada matriz posterior a la derecha de la matriz anterior y escanear las matrices combinadas verticalmente, la fórmula es:
=TOCOLO(HSTACK(A2:C4, A8:C10), ,TRUE)
Extraer valores únicos de un rango de varias columnas
La función UNIQUE de Excel puede encontrar fácilmente valores únicos en una sola columna o fila, así como devolver filas únicas, pero no puede extraer valores únicos de una matriz de varias columnas. La solución es utilizarla junto con la función TOCOL.
Por ejemplo, para extraer todos los valores diferentes (distintos) del intervalo A2:C7, la fórmula es:
=ÚNICO(TOCOL(A2:C7))
Además, puede envolver la fórmula anterior en la función SORT para organizar la matriz devuelta en orden alfabético:
=SORT(UNIQUE(TOCOL(A2:C7)))
Cómo convertir rango a columna en Excel 365 - 2010
En las versiones de Excel en las que la función TOCOL no está soportada, existen un par de formas alternativas de transformar un rango de celdas en una columna. Estas soluciones son bastante complicadas, pero de todas formas funcionan.
Para leer el rango por fila:
ÍNDICE( gama COCIENTE(FILA(A1)-1, COLUMNAS( gama ))+1, MOD(FILA(A1)-1, COLUMNAS( gama ))+1)Para leer el rango por columnas:
ÍNDICE( gama MOD(FILA(A1)-1, FILAS( gama ))+1, COCIENTE(FILA(A1)-1, FILAS( gama ))+1)Para nuestro conjunto de datos de muestra, las fórmulas son las siguientes:
Para explorar la gama horizontalmente de izquierda a derecha :
=ÍNDICE($A$2:$C$5, COCIENTE(FILA(A1)-1, COLUMNAS($A$2:$C$5))+1, MOD(FILA(A1)-1, COLUMNAS($A$2:$C$5))+1)
Esta fórmula es equivalente a la función TOCOL con el 3er argumento fijado en FALSE u omitido:
=TOCOL(A2:C5)
Para explorar la gama verticalmente de arriba abajo :
=ÍNDICE($A$2:$C$5, MOD(FILA(A1)-1, FILAS($A$2:$C$5))+1, COCIENTE(FILA(A1)-1, FILAS($A$2:$C$5))+1)
Esta fórmula es comparable a la función TOCOL con el tercer argumento ajustado a TRUE:
=PROTOCOLO(A2:C5, ,TRUE)
A diferencia de TOCOL, las fórmulas alternativas deben introducirse en cada celda en la que desee que aparezcan los resultados. En nuestro caso, las fórmulas van a las celdas E2 (por fila) y G2 (por columna), y luego se copian hasta la fila 13.
Si las fórmulas se copian en más filas de las necesarias, aparecerá un error #REF! en las celdas "extra". Para evitar que esto ocurra, puede anidar las fórmulas en la función IFERROR de la siguiente manera:
=IFERROR(INDEX($A$2:$C$5, COCIENTE(FILA(A1)-1, COLUMNAS($A$2:$C$5))+1, MOD(FILA(A1)-1, COLUMNAS($A$2:$C$5))+1), "")
Observe que para que las fórmulas se copien correctamente, bloqueamos el rango utilizando referencias de celda absolutas ($A$2:$C$5). En su lugar, puede utilizar un rango con nombre.
Cómo funcionan estas fórmulas
A continuación se muestra un desglose detallado de la primera fórmula que ordena las celdas por filas:
=ÍNDICE($A$2:$C$5, COCIENTE(FILA(A1)-1, COLUMNAS($A$2:$C$5))+1, MOD(FILA(A1)-1, COLUMNAS($A$2:$C$5))+1)
La idea es utilizar la función ÍNDICE para devolver el valor de una determinada celda basándose en sus números relativos de fila y columna en el rango.
En número de fila se calcula mediante esta combinación:
COCIENTE(FILA(A1)-1, COLUMNAS($A$2:$C$5))+1
QUOTIENT devuelve la parte entera de una división.
Para numerador Si la fórmula se introduce en E2, se utiliza ROW(A1)-1, que devuelve un número de serie desde 0 en E2 (la primera celda en la que se introduce la fórmula) hasta 11 en E13 (la última celda en la que se introduce la fórmula).
En denominador brough by COLUMNS($A$2:$C$5)) es constante e igual al número de columnas de su rango (3 en nuestro caso).
Ahora, si compruebas el resultado de QUOTIENT para las 3 primeras celdas (E2:E4), verás que es igual a 0 (porque la parte entera de la división es cero). Sumando 1 se obtiene la fila número 1.
Para las 3 celdas siguientes (E5:E5), QUOTIENT devuelve 1, y la operación +1 entrega el número de fila 2. Y así sucesivamente.
En otras palabras, esta parte de la fórmula crea una secuencia numérica que se repite, como 1,1,1,2,2,2,3,3,3,4,4,4,... Cada número se repite tantas veces como columnas haya en su rango.
Para calcular el número de columna se construye una secuencia numérica adecuada utilizando la función MOD:
MOD(FILA(A1)-1, COLUMNAS($A$2:$C$5))+1
Como hay 3 columnas en nuestro rango (A2:C5), la secuencia debe ser 1,2,3,1,2,3,...
La función MOD devuelve el resto tras la división.
En E2, MOD(FILA(A1)-1, COLUMNAS($A$2:$C$5))+1)
se convierte en
MOD(1-1, 3)+1)
y devuelve 1.
En E3, MOD(FILA(A2)-1, COLUMNA($A$2:$C$5))+1)
se convierte en
MOD(2-1, 3)+1)
y devuelve 2.
Una vez establecidos los números de fila y columna, INDEX no tiene problemas para obtener el valor deseado.
En E2, INDEX($A$2:$C$5, 1, 1) devuelve el valor de la 1ª fila y la 1ª columna del rango referenciado, es decir, de la celda A2.
En E3, INDEX($A$2:$C$5, 1, 2) devuelve el valor de la 1ª fila y la 2ª columna, es decir, de la celda B2.
Y así sucesivamente.
La segunda fórmula, que escanea el rango por columnas, funciona de forma similar. La diferencia es que utiliza MOD para obtener el número de fila y CUOTA para obtener el número de columna.
La función TOCOL no funciona
Si la función TOCOL arroja un error, lo más probable es que se deba a uno de estos motivos:
TOCOL no es compatible con Excel
Cuando aparezca un error #NAME?, lo primero que hay que comprobar es que el nombre de la función esté bien escrito. Si el nombre es correcto pero el error persiste, la función no está disponible en su versión de Excel. En este caso, considere la posibilidad de utilizar una alternativa TOCOL.
La matriz es demasiado grande
Un error #NUM indica que la matriz no cabe en una columna. Un caso típico es cuando se hace referencia a columnas o filas enteras.
No hay suficientes celdas vacías
Cuando se produce un error #SPILL, compruebe que la columna en la que se introduce la fórmula tiene suficientes celdas vacías para rellenarlas con los resultados. Si las celdas están visualmente vacías, asegúrese de que no hay espacios ni otros caracteres no imprimibles en ellas. Para obtener más información, consulte Cómo solucionar el error #SPILL en Excel.
Así es como puedes utilizar la función TOCOL en Excel 365 y soluciones alternativas en versiones anteriores para transformar una matriz bidimensional en una sola columna. Te agradezco tu lectura y espero verte en nuestro blog la próxima semana!
Cuaderno de prácticas
Función TOCOL de Excel - ejemplos de fórmulas (archivo .xlsx)