Obtener el Nombre de un Rango

Cuando trabajamos con Excel ya sea con formulas o con macros es muy util trabajar con nombres de rango, y en ocaciones necesitamos saber cual es el nombre de un rango o celda para saber que acción ejecutar, sin embargo no es tan facil saber cual es el nombre de un rango ya que Excel no cuenta con esa función por lo que es necesario crearla. El primer problema con que nos encontramos al crear nuestra función es que una sola celda puede tener varios nombres y de diferente ambito, por ejemplo puede tener 5 nombres de ambito de libro y 5 nombres de ambito de hoja y si queremos obtener el nombre de la celda tendriamos que definir cual nombre de los 10 es el que queremos obtener. El siguiente código obtiene el nombre de una celda o rango en base a 4 criterios que son los siguientes

  • Celda: La celda es range (rango) del cual queremos saber su nombre.
  • Ambito: Ambito es un string que especifica si queremos obtener el nombre con ambito “Worksheet” (Hoja) o “Workbook” (Libro).
  • Hoja: Hoja es un Worksheet (hoja) en la cual esta el nombre de la hoja, si el ambito es “Workbook” y se especifica una hoja, se ignora el ambito especificado y se considera como ambito “Worksheet”.
  • Prefijo: Prefijo es un string que especifica con que caracteres comienza el nombre de la hoja por ejemplo si prefijo es “n” entonces se ignoran los nombres que no comienzen con “n” y se devuelve el primer nombre que comienze con “n”.

 

Function NombreRango(Celda As Excel.Range, Optional Ambito As String, Optional Hoja As Worksheet, Optional Prefijo As String) As String
    On Error Resume Next
    Dim i As Long
    Dim Nombre As String
    Dim Referencia As Object
    If (Not Hoja Is Nothing) Then
        Set Referencia = Hoja
    Else
        Set Referencia = ThisWorkbook
    End If
    For i = 1 To Referencia.Names.Count
         If Not Application.Intersect(Referencia.Names(i).RefersToRange, Celda) Is Nothing Then
            Nombre = Mid(Referencia.Names(i).Name, InStr(1, Referencia.Names(i).Name, "!") + 1)
            If Ambito = Empty Or TypeName(Referencia.Names(i).Parent) = Ambito Then
                If Prefijo = Empty Or Mid(Nombre, 1, Len(Prefijo)) = Prefijo Then
                    NombreRango = Nombre
                    Err.Clear
                    Exit Function
                End If
            End If
        End If
    Next
    Err.Clear
End Function

Para usar el código lo colocamos en un modulo y lo utilizamos de la siguiente manera

Dim nombre AS String
Nombre=NombreRango(Range("A1"),Activesheet,"Worksheet","prefijoNombre")

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s