determinar un rango

21/10/2006 - 23:38 por leonardo | Informe spam
necesito determinar un rango de celdas que esté comprendido entre dos celdas
que tienen valores determinados.
Ejem
serieA
n1
n2
n3
.
.
.
nx
serieB

quiero que me dé el rango entre las palabras serieA y serieB ó contar
cuántas celdas hay entre ellas
La cuestión es que quiero hacer un macro para realizar una operación entre
esas series pero el usuario puede agregar filas entre ellas.
¿fui claro?

Preguntas similare

Leer las respuestas

#6 leo trujillo
23/10/2006 - 21:23 | Informe spam
Héctor: voy a tratar de responderte:

1) a) sí, que comience en la siguiente a PRE-SERIE (el título del subgrupo)
b) sí, aunque incluyera esa fila en blanco la ordenación la dejaría a
lo último. Aunque podría exigirle al usuario que no dejara ninguna en blanco
antes de la palabra SERIE. La cuestión es que ordene excluyendo la palabra
SERIE (los datos entre PRE-SERIE y SERIE)

Espero haberte aclarado.
Gracias por tu interés.
Leonardo



"Héctor Miguel" escribió en el mensaje
news:
hola, leonardo !

> (ABAJO LES MUESTRO EL TIPO DE TABLA)

[solo, tratando de esclarecer algunos puntos con -todavia- algo de


confusion]...

__ 1 __
> ... que el macro seleccione el rango A4:F11 y ordene por la columna F
> o sea, las filas desde donde dice PRE-SERIE hasta SERIE.

1) en la tabla que expones...
a) la palabra PRE-SERIE aparece en la fila 3 [luego entonces]...
al requerir que la seleccion inicie en la fila 4... debe


entenderse como...
-> la fila inmediata posterior a la primer palabra buscada ?
b) la [segunda] palabra SERIE aparece en la fila 13 [luego


entonces]...
al requerir que la seleccion termine en la fila 11... debe


entenderse como...
-> DOS filas 'antes' que la segunda palabra buscada ?
o la ultima fila con datos MAS UNA en la columna 'F' [dentro


del rango 'dinamico'] ?
o... ???

__ 2 __
> Dar la posibilidad de agregar filas con datos entre los títulos


(PRE-SERIE y SERIE)
> y asi no modificar lo que hace la rutina (si se agregan filas el rango


sera distinto) [...]

2) resuelto o aclarado el punto 1... sera mas facil completar 'el


cometido' :))

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.

__ la tabla expuesta __
> A B C D E F
> 1 NIVEL 1 CL SS AM VI TT
> 2
> 3 PRE-SERIE
> 4 Fca G C 9,125 8,15 9,2
> 5 Ta de la C 8,975 7,6 8,9
> 6 M PO O 9,450 8,2 7
> 7 Da Gz C 8,550 7,55 8,8
> 8 GCae C 9,275 6,25 8,6
> 9 S Rod C 7,900 7,7 8,05
> 10 Ag S C 8,875 6,65 8
> 11 NA PO GYCS 0,000
> 12 fasdf dd 0000
> 13 SERIE
> 14 SGAND O 9,450 9,6 9,25
> 15 ANA S C 9,475 9 8,9 9,4
> 16 N CAO GY 8,950 8,6 8,35
> 17
> 18 SERIE 2 ...


Respuesta Responder a este mensaje
#7 Héctor Miguel
24/10/2006 - 06:44 | Informe spam
hola, Leonardo !

1) a) si, que comience en la siguiente a PRE-SERIE (el titulo del subgrupo)
b) si, aunque incluyera esa fila en blanco la ordenacion la dejaria a lo ultimo.
Aunque podria exigirle al usuario que no dejara ninguna en blanco antes de la palabra SERIE.
La cuestion es que ordene excluyendo la palabra SERIE (los datos entre PRE-SERIE y SERIE)



1) no has comentado como [o de donde] obtiene el codigo la 'serie inicial' y la 'serie final' :D
haz pruebas con una macro +/- como la siguiente [en un modulo de codigo 'general' y la ejecutas desde 'esa' hoja]:
-> una vez que compruebes que 'la seleccion' es la que necesitas [es una forma de entre muchas mas posibles]...
eliminas la propiedad -> .Select
y la sustituyes por -> .Sort [etc. etc. etc.] que incluso esta ya 'preparada' [solo omites el apostrofo] :))

Sub Ordena_bloque()
Dim Busca_1 As String, Busca_2 As String, Fila_1 As Integer, Fila_2 As Integer
Busca_1 = "pre-serie"
Busca_2 = "serie"
Fila_1 = Evaluate("match(""" & Busca_1 & """,a:a,0)") + 1
Fila_2 = Evaluate("match(""" & Busca_2 & """,a:a,0)") - 1
Range("a" & Fila_1 & ":f" & Fila_2).Select 'Sort _
Key1:=Range("f" & Fila_1), Order1:=xlDescending, Header:=xlNo
End Sub

2) para el caso de dar formato [p.e. negritas cuando algun valor sea >= a 'x']
te sugiero usar los formatos condicionales
[de lo contrario, seria necesario hacer 'barridos' por todas las celdas 'ennegrecidas' previamente si cambias de opinion] :D

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.
Respuesta Responder a este mensaje
#8 leo trujillo
24/10/2006 - 19:06 | Informe spam
Héctor: muchas gracias.
Lo estudio y te comento.
Leonardo
"Héctor Miguel" escribió en el mensaje
news:%23%
hola, Leonardo !

> 1) a) si, que comience en la siguiente a PRE-SERIE (el titulo del


subgrupo)
> b) si, aunque incluyera esa fila en blanco la ordenacion la dejaria


a lo ultimo.
> Aunque podria exigirle al usuario que no dejara ninguna en blanco antes


de la palabra SERIE.
> La cuestion es que ordene excluyendo la palabra SERIE (los datos entre


PRE-SERIE y SERIE)

1) no has comentado como [o de donde] obtiene el codigo la 'serie inicial'


y la 'serie final' :D
haz pruebas con una macro +/- como la siguiente [en un modulo de


codigo 'general' y la ejecutas desde 'esa' hoja]:
-> una vez que compruebes que 'la seleccion' es la que necesitas [es una


forma de entre muchas mas posibles]...
eliminas la propiedad -> .Select
y la sustituyes por -> .Sort [etc. etc. etc.] que incluso esta ya


'preparada' [solo omites el apostrofo] :))

Sub Ordena_bloque()
Dim Busca_1 As String, Busca_2 As String, Fila_1 As Integer, Fila_2 As


Integer
Busca_1 = "pre-serie"
Busca_2 = "serie"
Fila_1 = Evaluate("match(""" & Busca_1 & """,a:a,0)") + 1
Fila_2 = Evaluate("match(""" & Busca_2 & """,a:a,0)") - 1
Range("a" & Fila_1 & ":f" & Fila_2).Select 'Sort _
Key1:=Range("f" & Fila_1), Order1:=xlDescending, Header:=xlNo
End Sub

2) para el caso de dar formato [p.e. negritas cuando algun valor sea >= a


'x']
te sugiero usar los formatos condicionales
[de lo contrario, seria necesario hacer 'barridos' por todas las


celdas 'ennegrecidas' previamente si cambias de opinion] :D

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.


Respuesta Responder a este mensaje
#9 leonardo
28/10/2006 - 19:34 | Informe spam
Héctor Miguel: gracias por lo indicado, funcionó según lo esperado.
Ahora, tengo un problema con la última serie de datos ya que Busca_2 está
vacía (es el final de los datos), lo que hice fue poner en la última fila la
palabra FIN y entonces busca esa palabra ¿habría alguna forma de adaptar el
código para que busque hasta que encuentre una vacía?
Gracias nuevamente.
Leonardo
"Héctor Miguel" escribió en el mensaje
news:##
hola, Leonardo !

> 1) a) si, que comience en la siguiente a PRE-SERIE (el titulo del


subgrupo)
> b) si, aunque incluyera esa fila en blanco la ordenacion la dejaria


a lo ultimo.
> Aunque podria exigirle al usuario que no dejara ninguna en blanco antes


de la palabra SERIE.
> La cuestion es que ordene excluyendo la palabra SERIE (los datos entre


PRE-SERIE y SERIE)

1) no has comentado como [o de donde] obtiene el codigo la 'serie inicial'


y la 'serie final' :D
haz pruebas con una macro +/- como la siguiente [en un modulo de


codigo 'general' y la ejecutas desde 'esa' hoja]:
-> una vez que compruebes que 'la seleccion' es la que necesitas [es una


forma de entre muchas mas posibles]...
eliminas la propiedad -> .Select
y la sustituyes por -> .Sort [etc. etc. etc.] que incluso esta ya


'preparada' [solo omites el apostrofo] :))

Sub Ordena_bloque()
Dim Busca_1 As String, Busca_2 As String, Fila_1 As Integer, Fila_2 As


Integer
Busca_1 = "pre-serie"
Busca_2 = "serie"
Fila_1 = Evaluate("match(""" & Busca_1 & """,a:a,0)") + 1
Fila_2 = Evaluate("match(""" & Busca_2 & """,a:a,0)") - 1
Range("a" & Fila_1 & ":f" & Fila_2).Select 'Sort _
Key1:=Range("f" & Fila_1), Order1:=xlDescending, Header:=xlNo
End Sub

2) para el caso de dar formato [p.e. negritas cuando algun valor sea >= a


'x']
te sugiero usar los formatos condicionales
[de lo contrario, seria necesario hacer 'barridos' por todas las


celdas 'ennegrecidas' previamente si cambias de opinion] :D

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.


Respuesta Responder a este mensaje
#10 Héctor Miguel
29/10/2006 - 00:45 | Informe spam
hola, leonardo !

... tengo un problema con la ultima serie de datos ya que Busca_2 esta vacia (es el final de los datos)
lo que hice fue poner en la ultima fila la palabra FIN y entonces busca esa palabra
habria alguna forma de adaptar el codigo para que busque hasta que encuentre una vacia?



una alternativa pudiera ser +/- como la siguiente:
[asumiendo que la variable 'Busca_2' queda vacia y la ultima fila 'con datos' corresponde a la columna 'F']...

Sub Ordena_bloque()
Dim Busca_1 As String, Busca_2 As String, Fila_1 As Integer, Fila_2 As Integer
Busca_1 = "pre-serie"
Busca_2 = "" ' "serie"
Fila_1 = Evaluate("match(""" & Busca_1 & """,a:a,0)") + 1
If Busca_2 = "" Then Fila_2 = Range("f" & Rows.Count).End(xlUp).Row _
Else Fila_2 = Evaluate("match(""" & Busca_2 & """,a:a,0)") - 1
Range("a" & Fila_1 & ":f" & Fila_2).Select 'Sort _
Key1:=Range("f" & Fila_1), Order1:=xlDescending, Header:=xlNo
End Sub

si cualquier duda [o informacion adicional]... comentas ?
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