jueves, 6 de agosto de 2020

INDICAR.LIBRO para crear índice de hojas

Son muchos los cambios que en los últimos meses estamos viviendo en el entorno de Excel, y muchas discusiones sobre el fin de una época (Scripts versus VBA, entre otras).
Sin dejar pasar estas nuevas oportunidades, sin dejar de aprender todos estos nuevos recursos, no es necesario (en mi opinión personal) dejarse llevar por el nerviosismo.
Está más que demostrado que Excel, hasta la fecha, no abandona ni deja a nadie atrás... incluso 'tecnologías' desfasadas de un pasado remoto de nuestra hoja de cálculo siguen estando operativas. Hablo en particular de las funciones de Excel - macros 4.0 .
Hoy en particular hablaré de la función INDICAR.LIBRO (GET.WORKBOOK), con su sintáxis:
=INDICAR.LIBRO(tipo;[Libro])
El segundo argumento, opcional, indicaría el libro de trabajo sobre el que actúa la función.
Si no indicamos nada trabajará sobre el libro abierto.
El primer argumento 'Tipo' admite valores enteros entre 1 y 38, siendo los más útiles:
1 - para recuperar una matriz/listado horizontal de todas las hojas del libro, en la forma [Libro]Hoja
3 - matriz/listado horizontal de todas las hojas seleccionadas del libro
4 - el número de hojas en el libro
38 - el nombre de la hoja activa.

Recordemos que para interactuar con estas funciones macros 4.0 debemos incorporarlas dentro del contexto de Nombres definidos.
Hoy emplearemos esta posibilidad para obtener un índice de las hojas de nuestro libro de trabajo, sobre el que construiremos anexo a éste un hipervínculo para movernos entre hojas...
INDICAR.LIBRO para crear índice de hojas

El primer paso necesario será crear un Nombre definido ('VinculoHojas') con la siguiente fórmula:
=DERECHA(TRANSPONER(INDICAR.LIBRO(1));LARGO(TRANSPONER(INDICAR.LIBRO(1)))-ENCONTRAR("]";TRANSPONER(INDICAR.LIBRO(1)))) & T(AHORA())
INDICAR.LIBRO para crear índice de hojas

Aspectos relevantes de la fórmula empleada...
Primero: usamos TRANSPONER sobre la fúnción INDICAR.LIBRO(1) ya que esta devuelve una matriz horizontal de datos... y la necesitamos en Vertical!.
Segundo: al devolver el nombre de la hoja en su forma [Libro]Hoja aplicamos la combinación clásica:
=DERECHA(texto;LARGO(texto)-ENCONTRAR("]";TEXTO))
lo que permite recuperar únicamente el nombre de la hoja.
Tercero: concatenamos al final de la fórmula anterior la función T(AHORA()) para incorporarle volatilidad ante los cambios en el número de hojas... Si bien siempre habrá que Calcular (presionar F9) para refrescrar los datos si aparecen hojas nuevas...
Si trabajamos con Microsoft 365 operaremos con su forma desbordada y bastará escribir en B3 la llamada a nuestro nombre definido =VinculoHojas
INDICAR.LIBRO para crear índice de hojas

Por decorar un poco más el índice en A3 añadimos un ordinal:
=FILA(B3#)-FILA($B$3)+1
haciendo referencia a la fórmula desbordada creada en B3... lo que se hace empleando #.

Y por último, por añadir más funcionalidad, en C3 insertamos la fórmula HIPERVINCULO:
=HIPERVINCULO("#'"&B3#&"'!A1")
INDICAR.LIBRO para crear índice de hojas

Listo. Ya tenemos nuestro índice dinámico de hojas...

Como curiosidad observamos que solo la primera celda toma el aspecto de 'celda vinculada' típica; si bien todas ellas son operativas.
Si no usas MS 365 tendrás que emplear una combinación de la función INDICE con otras funciones (como FILA) para recuperar los diferentes elementos de nuestra matriz de INDICRA.LIBRO(1).

Revisa esta entrada del blog y te sorprenderas de otra aplicación de esta función macro 4.0

No hay comentarios:

Publicar un comentario

Nota: solo los miembros de este blog pueden publicar comentarios.