martes, 3 de abril de 2012

Obtener el nombre de una hoja

La función CELDA devuelve información acerca del formato, la ubicación o el contenido de una celda. Su sintaxis es:

CELDA("tipo_de_info";[referencia])
  • "tipo_de_info" es una palabra elegida entre una lista de posibles argumentos: "DIRECCIÓN", "COLUMNA", "COLOR", "CONTENIDO"...
  • referencia (opcional) es el nombre de una celda.

CELDA con el argumento "NOMBREARCHIVO" se usa para obtener la ruta completa donde se guarda el libro así como el nombre de la hoja.

Nota: En la ayuda de Excel (al menos en las versiones 2003, 2007 y 2010) hay un error; en vez de "NOMBREARCHIVO" aparece "ARCHIVO".

Si usamos CELDA con el argumento "NOMBREARCHIVO" pero no usamos el segundo argumento, se puede producir un resultado inesperado. Veámoslo.

Abrimos Excel, sustituimos el nombre de la "Hoja1" por el de "Valores", ponemos los rótulos de la imagen siguiente y finalizamos guardando el libro en el escritorio con el nombre SE19-Celda_nombrearchivo.

Ya tenemos la hoja preparada. Vamos a intentar poner en C8 el nombre de la hoja.

En C2:
=CELDA("nombrearchivo")

En mi ordenador el resultado ha sido: C:\Users\Javi\Desktop\[SE19-Celda_nombrearchivo.xlsx]Valores

El nombre de la hoja ha quedado al final de la expresión y a continuación del corchete "]". Necesitamos conocer la longitud de la frase y en qué posición se encuentra el corchete para extraer los caracteres que hay a su derecha.

En C3:
=LARGO(C2)      [Resultado: 60]

En C4:
=ENCONTRAR("]";C2;1)      [Resultado: 53]

En C5:
=EXTRAE(C2;C4+1;C3-C4)      [Resultado: Valores]

En vez de EXTRAE, podemos usar la función DERECHA. Lo haremos en C6.

En C6:
=DERECHA(C2;C3-C4)      [Resultado: Valores]

Para prescindir de todas las celdas anteriores, creamos una fórmula compuesta en C8.

En C8:
=EXTRAE(CELDA("nombrearchivo");ENCONTRAR("]";CELDA("nombrearchivo");1)+1;LARGO(CELDA("nombrearchivo"))-ENCONTRAR("]";CELDA("nombrearchivo")))   [Resultado: Valores]

Hasta aquí todo parece correcto, pero hay un problema. Si cambiamos el nombre de otra hoja, la celda C8 ya no mostrará la etiqueta "Valores" sino la de la última hoja cambiada. Para comprobarlo, sustituimos "Hoja2" por "Compras" y volvemos a la hoja "Valores". Éste será el resultado:

Si ahora cambiamos "Hoja3" por "Balance anual" obtendremos:

El problema surge al prescindir del segundo argumento de la función CELDA. Si ponemos como segundo argumento cualquier celda de la hoja "Valores" el valor de C8 no cambiará, salvo que modifiquemos la etiqueta de la hoja "Valores". Así pues, debemos modificar las fórmulas de C2 y C8.

En C2:
=CELDA("nombrearchivo";Valores!E9)        [Vale cualquier celda]

En C8:
=EXTRAE(CELDA("nombrearchivo";Valores!E9);ENCONTRAR("]"; CELDA("nombrearchivo";Valores!E9);1)+1;LARGO(CELDA("nombrearchivo";Valores!E9))-ENCONTRAR("]";CELDA("nombrearchivo";Valores!E9);1))

Ya podemos cambiar tranquilamente el nombre de cualquier hoja sin temor de que se modifique el valor devuelto por la fórmulas de la celda C8 (excepto en el caso de que modifiquemos la etiqueta de la hoja "Valores").

 
 
 

No hay comentarios:

Publicar un comentario