La idea de hoy es renombrar fácilmente los Nombres definidos creados en nuestro Libro, para seguir una regla concreta.. y así agilizar nuestras fórmulas, referencias, etc.
Partiremos, para nuestro ejemplo, de tres Nombres definidos:
Para modificar los Nombres actuales haremos una acción algo 'retorcida', ya que en primer lugar, con una Function (NombreValores) trasladaremos el Nombre y el rango a que se refiere cada Nombre definido, a una matriz.. para posteriormente recuperarla con un procedimiento Sub (RenombrarNombreDefinidos), donde, en base a los datos guardados en la function, iremos eliminando cada Nombre existente y reemplezándolo con los nuevos datos.
En un módulo del proyecto de VBA para nuestro Libro de trabajo, dentro del Editor de VB:
Como vemos, realmente no estamos renombrando, si no que eliminamos primero y luego contruimos...
Lo que me parece interesante es el empleo de matrices/arrays para guardar la información y su posterior uso.
El resultado es el esperado:
Partiremos, para nuestro ejemplo, de tres Nombres definidos:
Para modificar los Nombres actuales haremos una acción algo 'retorcida', ya que en primer lugar, con una Function (NombreValores) trasladaremos el Nombre y el rango a que se refiere cada Nombre definido, a una matriz.. para posteriormente recuperarla con un procedimiento Sub (RenombrarNombreDefinidos), donde, en base a los datos guardados en la function, iremos eliminando cada Nombre existente y reemplezándolo con los nuevos datos.
En un módulo del proyecto de VBA para nuestro Libro de trabajo, dentro del Editor de VB:
Function NombreValores() As String() Dim NV As Name Dim i As Integer Dim arrNV() As String 'redefinimos la dimensión del Array ReDim arrNV(1 To Names.Count, 1 To 2) i = 1 'recorremos los diferentes nombres definidos 'y cargamos la matriz.... For Each NV In Names arrNV(i, 1) = NV.Name arrNV(i, 2) = NV.RefersTo i = i + 1 Next NombreValores = arrNV End Function ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Sub RenombrarNombreDefinidos() Dim NVs() As String Dim i As Integer Dim NuevoNombre As String Dim SheetName As String 'llamamos a la Function creada más arriba... 'y rellenamos la matriz/array NVs con los valores de la Function NVs = NombreValores() 'recorremos los valores de la matriz generada con valores de los Nombres For i = 1 To UBound(NVs) 'definimos la norma para el nuevo nombre a partir del viejo 'tres caracteres del nombre actual y un numerador. NuevoNombre = Left(NVs(i, 1), 3) & "_" & i 'borramos el 'viejo nombre' ActiveWorkbook.Names(NVs(i, 1)).Delete 'Creamos el nuevo nombre definido (con el nuevo nombre) ActiveWorkbook.Names.Add Name:=NuevoNombre, RefersTo:=NVs(i, 2) Next i End Sub
Como vemos, realmente no estamos renombrando, si no que eliminamos primero y luego contruimos...
Lo que me parece interesante es el empleo de matrices/arrays para guardar la información y su posterior uso.
El resultado es el esperado:
Ismael, es justo lo que necesito, pero como tengo escasos conocimientos de VBA, no soy capaz de interpretar cuáles son los nombres de las hojas donde traslada los datos la macro y los rangos de las tablas donde los pone. ¿Podrías colgar un ejemplo en excel? Muchísimas gracias.
ResponderEliminarHola José Antonio,
Eliminaresos listados que aparecen en la última imagen no los lista la macro, es una acción manual desde la ficha fórmulas > grupo Nombres definidos > botón Utilizar en la fórmula > opción Pegar Nombre > y en la ventana que aparezca Pegar lista.
Saludos
Muchas gracias, Saludos
Eliminar