Tres formas de obtener nombres de columnas específicas de una tabla
Esta semana surgió una duda sobre cómo devolver dinámicamente los nombres de columnas específicas de una tabla (por ejemplo, las columnas 1, 3, 5 y 7) como una matriz dinámica.
Hugo sugiere usar INDICE directamente sobre el rango de cabeceras:
``
=INDICE(RANGO_CABECERA;;{1\3\5\7})
`
Simple y efectivo: se pasa una constante matricial con las posiciones deseadas. Hugo además recomienda combinarlo con COINCIDIR para que, si las columnas se mueven de posición, la fórmula siempre localice la columna correcta.
Joan Recasens propone aprovechar el especificador #encabezados de las tablas de Excel junto con ELEGIRCOLS:
`
=ELEGIRCOLS(Tabla[#encabezados];1;3;5;7)
`
El #encabezados devuelve los nombres de columna de la tabla directamente, y ELEGIRCOLS selecciona las posiciones deseadas. Joan destaca que este especificador es muy útil para construir diccionarios de datos.
Un tercer miembro aporta un enfoque más avanzado con FILTRAR, COINCIDIR y SECUENCIA:
`
=TRANSPONER(
FILTRAR(A1:H1;
ESNUMERO(COINCIDIR(SECUENCIA(;COLUMNAS(A1:H1));{2;5;6};0))
)
)
``
Genera una secuencia con todas las posiciones de columna y filtra solo las que coinciden con las deseadas. Más flexible pero también más elaborado.
Tres enfoques distintos para el mismo problema, desde lo más directo hasta lo más flexible.
El problema: devolver solo algunas cabeceras
Surgió en la comunidad una duda aparentemente sencilla: cómo devolver dinámicamente los nombres de columnas concretas de una tabla (por ejemplo, las columnas 1, 3, 5 y 7) como una matriz dinámica, sin escribirlos a mano.
Es una necesidad muy habitual cuando construyes diccionarios de datos, cabeceras para un informe o cualquier estructura que deba sobrevivir a que alguien reordene las columnas del origen. Salieron tres enfoques, de menos a más flexible.
Enfoque 1: INDICE sobre las cabeceras
Hugo propone lo más directo: pasarle a INDICE una constante matricial con las posiciones que quieres.
`` =INDICE(RANGO_CABECERA;;POSICIONES) ``
Donde POSICIONES es una constante matricial horizontal con los números 1, 3, 5 y 7 (recuerda que en Excel en español el separador de columnas dentro de una constante matricial es la barra invertida, no el punto y coma).
Al dejar vacío el argumento de fila, INDICE devuelve las columnas completas indicadas. Simple y efectivo.
Hugo añade además un matiz importante: si existe la posibilidad de que las columnas cambien de sitio, conviene combinarlo con COINCIDIR para localizar cada columna por su nombre en lugar de por su posición fija. Así la fórmula sigue funcionando aunque alguien reordene la tabla.
Enfoque 2: el especificador #encabezados
Joan Recasens aprovecha algo que muchos ignoran: las tablas de Excel tienen un especificador propio para su fila de cabeceras.
`` =ELEGIRCOLS(Tabla[#encabezados];1;3;5;7) ``
Tabla[#encabezados] devuelve directamente los nombres de columna de la tabla, y ELEGIRCOLS se queda con las posiciones que le pidas. Sin rangos codificados a mano y sin constantes matriciales.
Joan destaca que este especificador es especialmente útil para construir diccionarios de datos: te da la lista de campos de la tabla lista para usar, y se actualiza sola si añades columnas.
Enfoque 3: FILTRAR con SECUENCIA
Un tercer miembro aporta la versión más elaborada:
`` =TRANSPONER( FILTRAR(A1:H1; ESNUMERO(COINCIDIR(SECUENCIA(;COLUMNAS(A1:H1));{2;5;6};0)) ) ) ``
La lógica: SECUENCIA(;COLUMNAS(A1:H1)) genera todas las posiciones de columna disponibles (1, 2, 3... hasta 8). COINCIDIR comprueba cuáles de esas posiciones están en la lista deseada, y ESNUMERO convierte el resultado en el vector de VERDADERO/FALSO que FILTRAR necesita. TRANSPONER lo pone en vertical.
Es más largo, pero también el más flexible: la lista de posiciones puede venir de otra celda, de un rango o de un cálculo previo, en vez de estar escrita dentro de la fórmula.
Funciones clave
INDICE: dejando vacío el argumento de fila y pasando una matriz de posiciones en el de columna, devuelve varias columnas de golpe.ELEGIRCOLS: selecciona columnas por posición de forma mucho más legible queINDICE.Tabla[#encabezados]: especificador estructurado que devuelve la fila de cabeceras de una tabla.COINCIDIR: localiza una columna por su nombre, para que la fórmula no dependa del orden.SECUENCIAyFILTRAR: la pareja que permite construir la selección de forma dinámica.
Cuál elegir
Si trabajas con una tabla de Excel y las posiciones son fijas, el #encabezados con ELEGIRCOLS es el más limpio de los tres. Si es un rango normal, INDICE con la constante matricial resuelve en un renglón. Y si las posiciones deben calcularse en tiempo real, el enfoque con SECUENCIA y FILTRAR es el único que lo permite.
Conclusión
Tres soluciones para el mismo problema, y la elección depende menos de cuál es "mejor" y más de si tu origen es una tabla o un rango, y de si las columnas que quieres son fijas o cambiantes. Estas comparativas, con varios miembros aportando su enfoque, son el día a día de la comunidad de Influexcel.
Más contenido de Excel en InflueXcel
- Cuenta clientes y cervezas en Excel 🍺 Caso "La Taberna: El Poney Pisador" (Nivel 1) Tutorial🍺 Noche cerrada en Bree. Frodo, Sam, Merry y Pippin cruzan la puerta de El Poney Pisador huyendo de los Jinetes Negros: la sala está a reven
- SUMAR.SI.CONJUNTO en acción con El Señor de los Anillos 🃏 El 21 de La Comarca TutorialLo que practicamos en este caso: • Contar cartas por palo con CONTAR.SI • Sumar valores con condiciones (SUMAR.SI / SUMAR.SI.CONJUNTO) • Apl
- Reto de Excel: El cumpleaños de Bilbo 🎂 | CONTAR.SI y SUMAR.SI desde cero (Nivel 1) TutorialEn La Comarca se celebra el cumpleaños número 111 de Bilbo Bolsón: cerveza, pasteles, fuegos artificiales… y algún curioso escondido tras el
- ¡Excel PowerQuery Hack! Conexiones con rutas relativas en 10 minutos! Tutorial¿Harto de ajustar las conexiones en PowerQuery cada vez que compartes tu archivo de Excel? 🙄 Convierte las conexiones de PowerQuery con ruta
- Mejora un 90% el rendimiento de Power Query con SQLite TutorialPower Query es una herramienta potente para consolidar, combinar y calcular datos, pero cuando trabajamos con millones de registros y calcul
- Reorganizar tablas mensuales: cruzar por persona buscando en vertical y en horizontal CasoNuevo caso interesante de la comunidad. Juan tenía varias tablas mensuales (a veces más de una en el mismo mes) y quería reorganizarlas por
- Un dato de todas las hojas, escrito una sola vez CasoEsta semana surgió en la comunidad un reto muy habitual cuando un libro tiene muchas hojas: mostrar el valor de la celda B3 de cada hoja, in
- Un índice de hojas que se genera solo: HYPERLINK en rangos desbordados CasoEsta semana surgió en la comunidad un pequeño "expediente X". Un miembro llegó tras ver un vídeo con una idea clara en la cabeza: montar una
- Reformatear un código alfanumérico al teclear: de NN1234567 a NN-12345-67 CasoEsta semana surgió en la comunidad una duda muy práctica: cómo conseguir que al escribir un código tipo NN1234567 (dos letras seguidas de si
- Reclasificación contable: duplicar cada fila con una conversión distinta por columna, en un único bloque CasoInteresante reto contable planteado esta semana por un miembro de la comunidad. Juan parte de una tabla de apuntes contables (rango C7:P10)