BUSCARX con valor devuelto dinámico: elige la columna con un botón o un segmentador

Una integrante de la comunidad planteó un reto muy habitual al trabajar con tablas de varias columnas: tiene una lista de municipios con cuatro columnas de temperaturas (máxima Meteosalud, máxima AEMET, mínima Meteosalud, mínima AEMET) y quería que BUSCARX no devolviera siempre la misma columna, sino la que ella eligiera con un control interactivo (una casilla, un botón, un desplegable).

El problema de fondo: el argumento de BUSCARX que indica qué matriz devolver suele ser una columna fija. La gracia está en hacerlo dinámico.

Opción 1 de Leo: botón de opciones + ELEGIRCOLS

Insertando un botón de opciones desde la ficha Programador, su valor (1, 2, 3, 4) queda vinculado a una celda. Con ese número, ELEGIRCOLS extrae de la tabla la columna que toca:

``
=BUSCARX(I5; B5:B24; ELEGIRCOLS(C5:F24; C2))
`

Donde C2 es la celda vinculada al botón. Cambias de botón y la respuesta cambia sola.

Opción 2 de Leo: segmentador + MAP / SUBTOTALES

Para gobernar la selección con un segmentador (slicer), primero hay que saber qué opción está marcada. El truco es mapear la tabla con SUBTOTALES, que es sensible a las filas que el segmentador deja visibles:

`
=MAP(Tabla1[Tipos temp]; LAMBDA(x; SUBTOTALES(3; x)))
`

Esa fórmula devuelve un 1 en la fila visible (la seleccionada) y 0 en las ocultas. Con BUSCARX sobre ese resultado desbordado recuperamos el nombre del tipo elegido:

`
=BUSCARX(1; J11#; ENCOL(C4:F4))
`

Y se cierra el círculo combinando todo con COINCIDIRX para que ELEGIRCOLS apunte a la columna correcta:

`
=BUSCARX(I5; B5:B24; ELEGIRCOLS(C5:F24; COINCIDIRX(L13; C4:F4)))
`

Leo apuntó además otra vía muy elegante: aprovechar que BUSCARX puede devolver un rango (una referencia, no solo un valor) y cruzar dos BUSCARX con el operador de intersección (el espacio) para quedarte con la celda exacta donde se cruzan municipio y tipo de temperatura.

La aportación de Nacho: INDIRECTO + ÍNDICE + COINCIDIR

Otra forma de hacer dinámica la columna es construir la referencia como texto y convertirla con INDIRECTO. Como INDIRECTO("A1") devuelve el contenido de A1, puedes montar el nombre del campo según la casilla marcada:

`
=INDIRECTO(ÍNDICE(rango_nombres_campo; COINCIDIR(VERDADERO; rango_checkboxes; 0)))
``

Es la técnica que Nacho usa para parametrizar informes: cambiando una sola variable en una celda evita tocar fórmulas largas y reduce el riesgo de error.

La comunidad lo recibió con un "Madre mía, a estudiar 🌟" más que merecido. El fichero adjunto incluye las dos opciones de Leo listas para abrir y trastear.

El reto: que BUSCARX devuelva la columna que tú elijas

BUSCARX es la función estrella para buscar un valor y traer el dato de otra columna. Pero por defecto esa columna es fija: siempre devuelve la misma. Una integrante de la comunidad planteó un caso muy real: una lista de municipios con cuatro columnas de temperaturas (máxima y mínima de dos fuentes distintas) y la necesidad de que BUSCARX devolviera la columna que ella seleccionara con un control interactivo: un botón, un desplegable o un segmentador.

El problema de fondo es cómo hacer dinámico el argumento de BUSCARX que decide qué matriz devolver. Salieron varias soluciones y todas enseñan algo.

Opción 1: botón de opciones + ELEGIRCOLS

Insertando un botón de opciones desde la ficha Programador, su valor (1, 2, 3 o 4) queda vinculado a una celda. Con ese número, ELEGIRCOLS recorta de la tabla justo la columna que toca:

`` =BUSCARX(I5; B5:B24; ELEGIRCOLS(C5:F24; C2)) ``

Donde C2 es la celda vinculada al botón. Cambias de opción y la respuesta cambia sola. Simple y muy visual.

Opción 2: segmentador + MAP + SUBTOTALES

Para gobernar la elección con un segmentador hace falta primero saber qué fila deja visible. El truco es mapear la tabla con SUBTOTALES, que solo cuenta las filas visibles:

`` =MAP(Tabla1[Tipos temp]; LAMBDA(x; SUBTOTALES(3; x))) ``

Devuelve un 1 en la fila que el segmentador deja a la vista y 0 en las ocultas. Con BUSCARX sobre ese resultado recuperamos el nombre del tipo elegido:

`` =BUSCARX(1; J11#; ENCOL(C4:F4)) ``

Y se cierra el círculo apuntando ELEGIRCOLS a la columna correcta mediante COINCIDIRX:

`` =BUSCARX(I5; B5:B24; ELEGIRCOLS(C5:F24; COINCIDIRX(L13; C4:F4))) ``

Leo apuntó además una vía muy elegante: aprovechar que BUSCARX puede devolver un rango (una referencia, no solo un valor) y cruzar dos BUSCARX con el operador de intersección —el espacio entre referencias— para quedarte con la celda exacta donde se cruzan municipio y tipo de temperatura.

Opción 3: INDIRECTO + INDICE + COINCIDIR

Otra forma de hacer dinámica la columna es construir el nombre del campo como texto y convertirlo en referencia con INDIRECTO:

`` =INDIRECTO(INDICE(rango_nombres_campo; COINCIDIR(VERDADERO; rango_casillas; 0))) ``

COINCIDIR localiza la casilla marcada, INDICE recupera el nombre de campo asociado e INDIRECTO lo convierte en el dato real. Es la técnica que Nacho usa para parametrizar informes: cambiando una sola variable en una celda evita tocar fórmulas largas y reduce el riesgo de error.

Funciones clave

  • BUSCARX: busca un valor y devuelve el dato asociado; puede devolver un valor o un rango.
  • ELEGIRCOLS: extrae de una matriz las columnas indicadas por su número.
  • COINCIDIRX / COINCIDIR: localizan la posición de un valor dentro de un rango.
  • SUBTOTALES: opera ignorando filas ocultas, ideal para reaccionar a segmentadores.
  • INDIRECTO: convierte texto en una referencia real.

Conclusión

De un botón a un segmentador, pasando por el texto convertido con INDIRECTO, hay muchas maneras de que BUSCARX deje de ser rígido y devuelva la columna que tú decidas en cada momento. La comunidad lo recibió con un merecido "a estudiar". Este tipo de retos, resueltos entre varios y con el fichero de ejemplo listo para trastear, son lo que encontrarás cada semana en Influexcel.

Más contenido de Excel en InflueXcel