Un índice de hojas que se genera solo: HYPERLINK en rangos desbordados
Esta 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 página de contenidos dinámica donde una sola fórmula desbordara la lista de nombres de hoja del libro y cada celda del resultado enlazara con su hoja correspondiente. Su intento no funcionaba y no entendía por qué.
Había partido de una fórmula con BYROW:
``
=BYROW(B3#;LAMBDA(s;HYPERLINK("#'"&INDICE(s;1)&"'!A1";INDICE(s;1))))
`
El problema es sutil. Como apuntó Nacho, HYPERLINK dentro de un array dinámico toma la celda donde vive la fórmula como dirección para todo el rango desbordado: todos los enlaces del spill acaban apuntando al mismo sitio en vez de cada uno a su hoja.
La solución llegó de la mano de John, que le daba vueltas al asunto desde hacía tiempo hasta que un día "hizo clic":
`
=SUSTITUIR(HYPERLINK("#'"&B3#&"'!A1";);0;B3#)
`
La clave está en dejar que HYPERLINK desborde directamente sobre el rango de nombres de hoja B3# (sin envolverlo en BYROW) y usar SUSTITUIR` para que en cada celda aparezca el texto visible correcto. Con una sola fórmula, la página de contenidos se actualiza sola cada vez que cambian las hojas del libro.
Se incluye el fichero de ejemplo con la página de contenidos dinámica montada sobre las hojas del libro.
El reto: una página de contenidos que se actualiza sola
Un libro con muchas hojas se navega mucho mejor si tiene una página de contenidos: una lista con el nombre de cada hoja donde, al hacer clic, saltas directamente a ella. Lo ideal es que esa lista sea dinámica: que una sola fórmula genere todos los nombres y que cada uno enlace con su hoja, de modo que si añades o quitas pestañas, el índice se actualice sin tocar nada.
Un miembro de la comunidad llegó con esa idea clara tras ver un vídeo, pero su fórmula no funcionaba y no entendía por qué. El diagnóstico es un detalle sutil que merece la pena conocer.
Por qué falla el primer intento
El planteamiento inicial envolvía HIPERVINCULO dentro de un BYROW:
`` =BYROW(B3#;LAMBDA(s;HIPERVINCULO("#'"&INDICE(s;1)&"'!A1";INDICE(s;1)))) ``
Parece razonable, pero hay una trampa. Como explicó Nacho, HIPERVINCULO dentro de un array dinámico toma como destino la celda donde vive la fórmula, la misma para todo el rango desbordado. El resultado: todos los enlaces del spill apuntan al mismo sitio en lugar de cada uno a su hoja. La lista se ve bien, pero los clics están rotos.
La solución: dejar que HIPERVINCULO se desborde
La respuesta la trajo John, que le daba vueltas al problema desde hacía tiempo:
`` =SUSTITUIR(HIPERVINCULO("#'"&B3#&"'!A1";);0;B3#) ``
La clave es doble:
- No envolver
HIPERVINCULOenBYROW. Al pasarle directamente el rango desbordadoB3#, la función se desborda ella sola y cada celda del resultado calcula su propio destino'NombreHoja'!A1. - Usar
SUSTITUIRpara arreglar el texto visible. Al dejar vacío el segundo argumento deHIPERVINCULO, cada enlace muestra un0;SUSTITUIRreemplaza ese0por el nombre de hoja correspondiente deB3#.
Con una sola fórmula, la página de contenidos queda montada y se regenera sola cada vez que cambian las hojas del libro.
Funciones clave
HIPERVINCULO: crea un enlace navegable; con#'Hoja'!A1salta dentro del propio libro.SUSTITUIR: reemplaza un texto por otro; aquí, el marcador por el nombre real de la hoja.B3#: el operador#referencia todo el rango desbordado que generan los nombres de hoja.
Un matiz sobre el marcador
Usar el 0 como marcador funciona, pero tiene un flanco débil que ya ha aparecido en otros retos de la comunidad: si algún nombre de hoja contiene un cero, SUSTITUIR lo reemplazaría también. Para un índice a prueba de balas conviene elegir como marcador un carácter que jamás aparezca en el nombre de una hoja.
Conclusión
Este pequeño "expediente X" deja una lección muy útil sobre cómo se comportan las funciones que generan referencias dentro de arrays dinámicos: HIPERVINCULO mira siempre a la celda que la aloja. Entenderlo permite pasar de una fórmula que "casi funciona" a un índice de hojas autoactualizable en una sola línea. Retos así, con el problema real y la solución afinada entre varios, son el pan de cada día en 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
- 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)
- Crear una tabla automáticamente cuando no sabes cuántas filas vienen (Office Scripts) CasoUn miembro de la comunidad llegó con un reto poco habitual: necesitaba un script para Excel en la web que convirtiera un rango en tabla sin