Formulario de contacto

Nombre

Correo electrónico *

Mensaje *

lunes, 22 de febrero de 2016

Obtener el nombre de la hoja de trabajo en una celda en Excel

Hola, hoy les quiero hablar de un problema que un lector me contó.

Imaginemos que se tiene un libro que contiene X hojas de trabajo y se es necesario tener el nombre de la hoja presente en una celda de esa hoja de cálculo. 

Ahora queremos saber si existe una macro, o alguna manera de obtener el nombre de la hoja en una celda.


La respuesta corta es sí, hay una manera. De hecho, hay un par de maneras. Y, curiosamente, no se tiene que utilizar una macro o función si no desea. Por ejemplo, aquí hay una fórmula de hoja que funcionará en cualquier celda de la hoja de cálculo:


=EXTRAE(CELDA("nombrearchivo",A1),ENCONTRAR("]",CELDA("nombrearchivo",A1))+1,255)


Analizando esta fórmula, vemos que la parte con la función CELDA en esta fórmula devuelve el nombre completo de la hoja de trabajo, incluyendo la ruta de acceso y nombre de archivo del archivo y lo situa en la celda A1. Es decir, en mi caso

=CELDA("nombrearchivo",A1)= 'C:\Documents\Excel\[Example.xlsx]Summary'


El uso de la función ENCONTRAR hace que limpiemos ese texto y nos quedemos sólo con el nombre de la hoja.

Es importante reflejar el uso de una referencia de celda (A1) en cada instancia de la función CELDA. Esto obliga a la función CELDA a devolver el nombre de la hoja que contiene la referencia de celda. Sin esta referencia (dejandolo en blanco, CELDA("nombrearchivo")se obtendría el mismo resultado (la primera hoja de cálculo) para cada instancia de la fórmula.


También es importante reflejar que esta fórmula no proporcionará resultados válidos si se usa en un libro nuevo, uno que no se ha guardado. Es necesario guardar el libro por lo que en realidad tiene un nombre que puede ser devuelto por la función CELDA con éxito. 


------------------------------------------------------------------------------------------------------------------------
RECUERDA QUE:

Tú puedes colaborar para seguir manteniendo este blog de una manera gratuita haciendo varios clics en los anuncios de la página. Como referencia, 2 clics por artículo. Muchas gracias por querer colaborar.

------------------------------------------------------------------------------------------------------------------------


Asi mismo, no funcionará correctamente si el nombre del libro o la hoja de cálculo contiene un carácter de corchete de cierre ("]"). En ese caso, tendrá que utilizar una de las otras soluciones discutidas a continuación.




Si prefiere utilizar una función definida por el usuario, se puede intentar algo simple, como esta función:


Function TabName1() As String
    Application.Volatile
    TabName1 = ActiveSheet.Name
End Function

Esta función no proporcionará los resultados deseados, debido a que siempre devuelve el nombre de la hoja de cálculo activa. Eso significa que si se tiene la función de llamada en cada una de las hojas de su libro, en todo caso devolverá el nombre de la hoja activa en cada una de esas hojas de trabajo, en lugar del nombre de la hoja en la que se utiliza la función. La siguiente función ofrece mejores resultados:


Function TabName2() As String
    Application.Volatile
    TabName2 = Application.Caller.Parent.Name
End Function

Si se cree que se va a utilizar la función para hacer referencia a un nombre de hoja de cálculo en otra parte del libro, entonces esta función va a funcionar mejor:


Function TabName3(cell As Range)
    TabName3 = cell.Worksheet.Name
End Function

Esta versión de la función requiere que se proporcione una referencia a cualquier referencia de celda de la hoja cuyo nombre se desea extraer.


Por supuesto, si no se desea utilizar una función definida por el usuario, simplemente se puede crear una macro que rellene el nombre de cada pestaña de la hoja en la misma celda en cada hoja de cálculo. Por ejemplo, la siguiente macro recorre cada una de las hojas del libro y coloca el nombre de cada hoja de cálculo en la celda A1.


Sub TabName4()
    For J = 1 To ActiveWorkbook.Sheets.Count
        Sheets(J).Cells(1, 1).Value = Sheets(J).Name
    Next
End Sub


Se ha de tener en cuenta que este enfoque no es dinámico (hay que volver a ejecutar la macro cada vez que se cambien los nombres de las hojas o se añadan nuevas hojas de cálculo). También superpone todo lo que está en la celda A1. (Si desea que los nombres de las hojas colocadas en una celda diferente en cada hoja de cálculo, cambiar los valores utilizados en la colección Cells).




Te ha gustado el artículo?



No te olvides de mostrar tu gratitud hacia el autor (yo) mediante una de las 3 siguientes acciones:

1. Puedes invitarme a un café pinchando en la siguiente imagen.

Image result for coffee icon


2. Puedes hacer clic en los anuncios mostrados en la página

3. Puedes recomendar el artículo en Google haciendo clic en g+1 (justo después del artículo), también puedes compartirlo en Facebook, y/o dejar comentarios.

Quieres aprender más en Excel o tienes algún problema que necesita solución?

Puedo ofrecer servicios de consultoría así como cursos personalizados online. Mírate el siguiente enlace si estás interesado/a.




Subscríbete y recibe todos las entradas por email


Para ello regístrate suministrando tu email en el sitio "Recibe los trucos en tu email" del menú de la derecha.

O sígueme por las redes sociales


4 comentarios: