Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

como saber si una celda está en un rango?

2,045 views
Skip to first unread message

Gema

unread,
Jun 14, 2004, 3:57:31 AM6/14/04
to
Hola gente,

Necesito ayuda porque soy nueva en el tratamiento de excel con visual
basic..
Quiero ver si una celda pertenece a un rango definido

Veamos.. mi rango es:

RANGO = "A16B16:A60B60"

y quiero saber si la celda que paso como variable a una funcion pertenece
a este rango.

Muchas gracias por adelantado.

Héctor Miguel

unread,
Jun 14, 2004, 5:14:51 AM6/14/04
to
hola, Gema !

> ... ver si una celda pertenece a un rango definido
> ... mi rango es: "A16B16:A60B60"
> ... saber si la celda que paso como variable a una funcion pertenece a este rango.

=> nota que estas 'ejemplificando' DOS rangos 'discontinuos' <=
'A16:B16' Y 'A60:B60'
suponiendo que tu funcion 'ya recibe' el argumento para la celda que 'le pasas' [p.e.]
Function Mi_Funcion(ByVal EstaCelda As Range) [etc. etc. etc.]
puedes usar la instruccion 'Intersect' [+/- de la siguiente manera]
If Not Intersect(Range("a16:b16,a60:b60"), EstaCelda) Is Nothing Then
' aqui las instrucciones SI 'EstaCelda' es parte del rango '
Else
' aqui las instrucciones SI 'EstaCelda' NO es parte del rango '
End If

saludos,
hector.

Gema

unread,
Jun 14, 2004, 7:27:39 AM6/14/04
to
Gracias Héctor,

Yo me habia hecho un bucle recorriendo el rango para ver si esa celda
estaba en él, pero si ya existe la funcion Intersect es tonteria... solo
que tengo problemas con la obtencion de la celda como Range.

Te cuento...

Cuando se hace un cambio de escritura sobre una hoja del libro excel,
ejecuto determinadas actividades.
La forma de recoger la celda sobre la que se produjo el cambio es de tipo
Range, sin embargo lo que me llega es el valor de la celda.

Private Sub Worksheet_Change(ByVal Target As Range)


Call Change(Target, Target.Worksheet.Index)

End Sub

En el procedimiento Change quiero detectar si se trata de una celda que
esta en el rango [A16:B60]

El problema es que si llamo Intersect(Range(rng2), Target), en target me
esta cargando "1", que es el valor que tiene la celda. Y tambien he
probado esto otro sin éxito.

Sub Change(ByVal Target As Range, isheet As Long)

Dim dentro As Boolean
Dim rng2 As String
Dim rng3 As Range
rng2 = "A16:B60"
rng3 = Target.Column & ":" & Target.Row '----> Se queda de la forma
(1:16)
dentro = False

If Intersect(Range(rng2), Range(rng3)) Is Nothing Then
dentro = True
End If


End Sub

Las dos formas de pasar el parametro del rng3 me da problemas ¿Cómo
construir el parametro (¿Qué formato?) de la celda que quiero comprobar si
está en el rango?.. puede alguien echarme una manilla .. please??


De nuevo, muchas gracias si me podeis ayudar.

Gema

unread,
Jun 14, 2004, 9:23:42 AM6/14/04
to
Nada.. todo perfecto tal y como me lo indicaste, tenia un error en otro
sitio..

Un saludo,
Gema.
Muchas gracias.

0 new messages