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
- 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)