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 que INDICE.
  • 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.
  • SECUENCIA y FILTRAR: 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