saber celdas que forman parte de un nombre de celda

13/10/2006 - 22:18 por Pedro Latasa | Informe spam
buenas.
quiero saber la celda E25 en cuántos nombres de celda ha sido incluida. ¿Lo
puedo saber?
Desde Insertar -- >Nombre --> Definición soy capaz de saber los nombres de
celdas y sus rangos, pero, cómo puedo obtener la información al revés.

Muchas gracias. Un saludo.

Preguntas similare

Leer las respuestas

#6 KL
14/10/2006 - 00:49 | Informe spam
Hola chicos,

No se si malinterpreto la tarea, pero y que pasa si la celda activa si que tiene la referencia buscada solo que... esta en otra hoja
y por tanto en realidad no forma parte del nombre que se le achaca por el codigo? Si lo que se busca es saber si la celda elegida
forma parte de algun nombre 'realmente' quizas la siguiente aproximacion podria ser mas precisa (y de paso evitamos las multiples
operaciones con cadenas de texto en forma Address):

Sub test()
Dim n As Name, rng As Range
For Each n In ThisWorkbook.Names
On Error Resume Next
Set rng = Intersect(ActiveCell, n.RefersToRange)
On Error GoTo 0
If Not rng Is Nothing Then MsgBox n.Name
Next n
End Sub

Saludos,
KL


"Héctor Miguel" wrote in message news:
hola, Toni !

Supongo que para recordar un tema de hace mas de 3 a#os utilizas algun buscador por temas o similar.
Si no es asi, te felicito por tu memoria tematica.
Yo, en ocasiones, tengo problemas para recordar lo que cene ayer noche.



no creas que 'confio' [demasiado] en la memoria :D [confucio decia:]
-> ' es mejor la mas palida tinta... que la mas brillante memoria ' :))

lo que yo hago [outlook express] es:
1) he creado 'nuevas' carpetas en la 'bandeja' de las carpetas locales 'categorizadas'
2) de los mensajes que descargo, los que considero 'memorables' [o... 'con futuro']
los copio a 'su' carpeta [incluso, quedan fuera de las 'acciones' de mantenimiento]
3) ademas [y 'solo por si las...'], periodicamente hago respaldos de las mismas.
4) buscar mensajes/temas/contenidos/... en esas carpetas ? -> 'pan comido' :))

espero sea de utilidad ;)
saludos,
hector.

Respuesta Responder a este mensaje
#7 Héctor Miguel
14/10/2006 - 02:16 | Informe spam
hola, a todos !

KL escribio en el mensaje ...
No se si malinterpreto la tarea, pero y que pasa si la celda activa si que tiene la referencia buscada solo que... esta en otra hoja y por tanto en realidad no forma parte del nombre que se le achaca por el codigo?
Si lo que se busca es saber si la celda elegida forma parte de algun nombre 'realmente'
quizas la siguiente aproximacion podria ser mas precisa
(y de paso evitamos las multiples operaciones con cadenas de texto en forma Address):



1) [creo que] ambas propuestas tienen sus 'pros y contras' [y 'fallas similares'] :)) [me explico]:
a) los nombres ->son parte de<- el libro que los contiene... o de cada hoja [si existe nombres 'repetidos/duplicados']
b) cuando 'creas' nombres con referencia a rangos... el primero 'permanece tal-cual'
-> y es el que 'manda' cuando se hace referencia a ese nombre en otras hojas [a menos que...]
c) cuando copias una hoja ->que contiene nombres<-... NO hay 'problemas'
[excel 'resuelve' este tipo de 'conflictos' generando un nuevo 'set' de nombres relativos a la 'nueva' hoja]
d) si deseas definir [en varias hojas] nombres usando los que ya existen...
-> deberas ANTEPONER el nombre de la hoja y el signo ->!<- [cierre de admiracion] y en estos casos...
-> el nombre que 'aparecera' en la caja de nombres o en el dialogo de 'pegar nombre', sera el correspondiente a la hoja activa

2) comentado lo anterior... el 'uso multiple' de la propiedad '.Address' -> pasa a ser una 'ventaja' ? [considerando lo siguiente]:
a) si existen nombres 'repetidos' [globales/libro y locales/hoja] -> 'Address' maneja un argumento: -> 'External' [incluye libro y hoja]
b) dicho argumento permite 'verificar' si el libro y la hoja son [o no] 'los mismos' entre nombre-definido y celda que se busca ;)

3) existiendo un nombre 'base' [digamos en hoja1 -> b3:b12 -> si copiamos LA HOJA... habra otro nombre 'igual'... pero: 'local' en hoja2 ?
si 'movemos' el rango [en la hoja2] de b3:b12 -> c3:c12 -> si seleccionamos alguna celda en hoja2 dentro del rango...
-> la propuesta de KL la incluye en ambos nombres -???-
-> la 'mia' ?... 'detecta' [falsamente] las celdas en el rango 'C' de la hoja1 [caso a la inversa] :-((

4) a mayor numero de -posibles- 'eventualidades'... menores son las posibilidades de mantener un codigo 'delgado' :D
una propuesta 'alterna'...

Sub Celda_En_Nombre()
Dim Nombre As Name, Celda As String, Base_Celda As String, _
Ref_Nombre As String, Base_Nombre As String, Mensaje As String
Celda = ActiveCell.Address
Base_Celda = ActiveCell.Address(, , , True)
Base_Celda = Left(Base_Celda, InStr(Base_Celda, "!"))
On Error Resume Next
For Each Nombre In ActiveWorkbook.Names
Ref_Nombre = Nombre.RefersToRange.Address(, , , True)
If Ref_Nombre <> "" Then
Base_Nombre = Left(Ref_Nombre, InStr(Ref_Nombre, "!"))
If Base_Nombre = Base_Celda Then _
If Not Intersect(Range(Celda), Range(Ref_Nombre)) Is Nothing _
Then Mensaje = Mensaje & "> " & Nombre.Name & vbCr
Ref_Nombre = ""
End If
Next
If Mensaje = "" Then Mensaje = "Ninguno !!!"
MsgBox "Nombres en los que ""interviene"" " & Celda & vbCr & Mensaje
End Sub

5) ahora ?... a tratar de adelgazar este nuevo codigo :))

saludos,
hector.

__ el codigo expuesto __
Sub test()
Dim n As Name, rng As Range
For Each n In ThisWorkbook.Names
On Error Resume Next
Set rng = Intersect(ActiveCell, n.RefersToRange)
On Error GoTo 0
If Not rng Is Nothing Then MsgBox n.Name
Next n
End Sub
Respuesta Responder a este mensaje
#8 KL
14/10/2006 - 03:38 | Informe spam
Hola HM,

Igual me he perdido algo, pero con una ligera modificacion mi codigo original se comporta de la misma manera que tu codigo nuevo:

Sub test2()
Dim n As Name, rng As Range
For Each n In ThisWorkbook.Names
On Error Resume Next
Set rng = Intersect(ActiveCell, n.RefersToRange)
On Error GoTo 0
If Not rng Is Nothing Then MsgBox n.Name
Set rng = Nothing
Next n
End Sub

En cuanto a los rangos definidos mediante referencia a hoja dinamica, asi como rangos devueltos mediante formulas del tipo
=!$O$1:INDICE(!$R:$R;COINCIDIR(9E+307;!$O$1:$O$1000)), ni tu solucion, al parecer, lo maneja, ni estoy seguro de que tenga ganas de
meterme en ello ahora mismo :-)

Saludos,
KL


"Héctor Miguel" wrote in message news:
hola, a todos !

KL escribio en el mensaje ...
No se si malinterpreto la tarea, pero y que pasa si la celda activa si que tiene la referencia buscada solo que... esta en otra
hoja y por tanto en realidad no forma parte del nombre que se le achaca por el codigo?
Si lo que se busca es saber si la celda elegida forma parte de algun nombre 'realmente'
quizas la siguiente aproximacion podria ser mas precisa
(y de paso evitamos las multiples operaciones con cadenas de texto en forma Address):



1) [creo que] ambas propuestas tienen sus 'pros y contras' [y 'fallas similares'] :)) [me explico]:
a) los nombres ->son parte de<- el libro que los contiene... o de cada hoja [si existe nombres 'repetidos/duplicados']
b) cuando 'creas' nombres con referencia a rangos... el primero 'permanece tal-cual'
-> y es el que 'manda' cuando se hace referencia a ese nombre en otras hojas [a menos que...]
c) cuando copias una hoja ->que contiene nombres<-... NO hay 'problemas'
[excel 'resuelve' este tipo de 'conflictos' generando un nuevo 'set' de nombres relativos a la 'nueva' hoja]
d) si deseas definir [en varias hojas] nombres usando los que ya existen...
-> deberas ANTEPONER el nombre de la hoja y el signo ->!<- [cierre de admiracion] y en estos casos...
-> el nombre que 'aparecera' en la caja de nombres o en el dialogo de 'pegar nombre', sera el correspondiente a la hoja
activa

2) comentado lo anterior... el 'uso multiple' de la propiedad '.Address' -> pasa a ser una 'ventaja' ? [considerando lo
siguiente]:
a) si existen nombres 'repetidos' [globales/libro y locales/hoja] -> 'Address' maneja un argumento: -> 'External' [incluye
libro y hoja]
b) dicho argumento permite 'verificar' si el libro y la hoja son [o no] 'los mismos' entre nombre-definido y celda que se busca
;)

3) existiendo un nombre 'base' [digamos en hoja1 -> b3:b12 -> si copiamos LA HOJA... habra otro nombre 'igual'... pero: 'local'
en hoja2 ?
si 'movemos' el rango [en la hoja2] de b3:b12 -> c3:c12 -> si seleccionamos alguna celda en hoja2 dentro del rango...
-> la propuesta de KL la incluye en ambos nombres -???-
-> la 'mia' ?... 'detecta' [falsamente] las celdas en el rango 'C' de la hoja1 [caso a la inversa] :-((

4) a mayor numero de -posibles- 'eventualidades'... menores son las posibilidades de mantener un codigo 'delgado' :D
una propuesta 'alterna'...

Sub Celda_En_Nombre()
Dim Nombre As Name, Celda As String, Base_Celda As String, _
Ref_Nombre As String, Base_Nombre As String, Mensaje As String
Celda = ActiveCell.Address
Base_Celda = ActiveCell.Address(, , , True)
Base_Celda = Left(Base_Celda, InStr(Base_Celda, "!"))
On Error Resume Next
For Each Nombre In ActiveWorkbook.Names
Ref_Nombre = Nombre.RefersToRange.Address(, , , True)
If Ref_Nombre <> "" Then
Base_Nombre = Left(Ref_Nombre, InStr(Ref_Nombre, "!"))
If Base_Nombre = Base_Celda Then _
If Not Intersect(Range(Celda), Range(Ref_Nombre)) Is Nothing _
Then Mensaje = Mensaje & "> " & Nombre.Name & vbCr
Ref_Nombre = ""
End If
Next
If Mensaje = "" Then Mensaje = "Ninguno !!!"
MsgBox "Nombres en los que ""interviene"" " & Celda & vbCr & Mensaje
End Sub

5) ahora ?... a tratar de adelgazar este nuevo codigo :))

saludos,
hector.

__ el codigo expuesto __
Sub test()
Dim n As Name, rng As Range
For Each n In ThisWorkbook.Names
On Error Resume Next
Set rng = Intersect(ActiveCell, n.RefersToRange)
On Error GoTo 0
If Not rng Is Nothing Then MsgBox n.Name
Next n
End Sub




Respuesta Responder a este mensaje
#9 Héctor Miguel
14/10/2006 - 03:53 | Informe spam
hola, KL !

Igual me he perdido algo, pero con una ligera modificacion mi codigo original se comporta de la misma manera que tu codigo nuevo:
Sub test2()
Dim n As Name, rng As Range
For Each n In ThisWorkbook.Names
On Error Resume Next
Set rng = Intersect(ActiveCell, n.RefersToRange)
On Error GoTo 0
If Not rng Is Nothing Then MsgBox n.Name
Set rng = Nothing
Next n
End Sub



-> tienes razon :D
[ya decia yo que 'por algo' trato de evitar instruccoines del tipo 'Set' sin devolverlas a 'Nothing'] ;)
[y ya esta en 'mi coleccion' de trucos] :D

En cuanto a los rangos definidos mediante referencia a hoja dinamica, asi como rangos devueltos mediante formulas del tipo =!$O$1:INDICE(!$R:$R;COINCIDIR(9E+307;!$O$1:$O$1000)), ni tu solucion, al parecer, lo maneja
ni estoy seguro de que tenga ganas de meterme en ello ahora mismo :-)



-> [hasta donde se]... los nombre con referencia a rangos 'dinamicos'... -> son: 'otra cosa' :))

saludos,
hector.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida