Jump to content
Sign in to follow this  
AJORDAN

Rango variable

Recommended Posts

Hola a todos,

llevo tiempo peleándome con una macro que estoy haciendo y me resultaría util tener un rango que variase según el criterio que os voy a contar, pero no sé cómo hacerlo:

El Rango es:

Set Rng = Range("L" & rows(0) & ":R" & rows(0) & ",L" & rows(1) & ":R" & rows(1) & ",L" & rows(2) & ":R" & rows(2) & ",L" & rows(3) & ":R" & rows(3) & ",L" & rows(4) & ":R" & rows(4) & ", L" & rows(5) & ":R" & rows(5) & ", L" & rows(6) & ":R" & rows(6))

que es básicamente las celdas de las columnas de la L a la R , donde rows() es la fila.

rows() es una variable (integer que varía en función de otra llamada nccas) que se va redimesionando de la siguiente manera:

Sub añadir(ByVal fila As Integer)

nccas = nccas + 1

ReDim Preserve rows(0 To nccas - 1)

rows(nccas - 1) = fila

End Sub

Así, si nccas = 7, tengo rows (0), rows(1)...hasta rows(6), para lo que me vale Rng según está definido.

El problema es que nccas va variando según una serie de cosas que no vienen a cuento, con lo que rows se va redimensionando constantemente y Rng ya no me vale porque, por ejemplo, si ncca = 5, ni rows(5) ni rows(6) existe.

Lo que no quiero es tener que ir redimensionando Rng de la forma:

If nccas = 5 Then Set Rng = (".......) porque lo tendría que hacer un millón de veces .

Después Rng lo uso para:

x = Application.Min(Rng)

Minimo Rng, x

Bueno, la pregunta es:

¿Cómo se puede definir Rng para que dependiendo de nccas ( o de si existe o no rows(i)) se redimensione automáticamente?

Gracias anticipada por vuestra ayuda.

Alfredo

Share this post


Link to post
Share on other sites

.

Si te he entendido bien te estas complicando la vida inútilmente.

Prueba este ejemplo:


Sub Ejemplo()

Fila = 10 'fila de inicio
Filas = 7 'nº de filas del rango

Set Rango = Range(Range("L" & Fila), _
Range("R" & Fila + Filas - 1))

MsgBox Rango.Address

End Sub


[/CODE]

[b]Nota[/b]: No es buena idea utilizar nombres de objetos/propiedades como nombres de variables, me refiero al [b][i]array rows[/i][/b]. Tarde o temprano acabaras teniendo problemas.

Share this post


Link to post
Share on other sites

Hola Macro Antonio,

Primero agradecerte tu respuesta, pero creo que no me vale. Tu código me da un Rango continuo y mi problema es que mis rangos son discontinuos.

En esencia, de una tabla, tengo que encontrar el valor mínimo de varias filas (alternas). Por ejemplo filas 7, 13 y 26. Esto muchas veces, variando las filas.

Pero el número de filas también cambia, y si en la primera iteracción eran las 7, 13 y 26, en la segunda pueden ser las 34, 35, 47, 53, 59 y 65. Y en la tercera la 22 solamente, etc.

Entonces, como esto lo hago cientos de veces, no quiero estar definiendo cientos de rangos, ese es mi problema.

Gracias de nuevo.

Share this post


Link to post
Share on other sites

Gracias JoseKar por tu aporte, el tema de buscar los valores mínimos ya lo tengo solventado. El problema es con el rango. El que tú me propones es continuo, aunque haya celdas vacías. Yo tengo 100 filas en las que buscar, todas con datos desde las columna L a la R. Lo que ocurre es que tengo que hacer muchas búsquedas, y en cada una con unas pocas filas solamente (máximo 7 filas a la vez)-

Lo que se me ha ocurrido, aunque poco elegante, es hacer un Rango como el que puse en el primer post:

Set Rng = Range("L" & rows(0) & ":R" & rows(0) & ",L" & rows(1) & ":R" & rows(1) & ",L" & rows(2) & ":R" & rows(2) & ",L" & rows(3) & ":R" & rows(3) & ",L" & rows(4) & ":R" & rows(4) & ", L" & rows(5) & ":R" & rows(5) & ", L" & rows(6) & ":R" & rows(6))

y si en un caso por ejemplo tengo que buscar sólo en las filas 3, 56 y 83, hacer rows(0) = 3, rows(1) = 56 y rows(2) = 83, y para que no me de fallo, hacer rows(3) a rows(7) igual a una fila donde no tenga valores. Pero me paree un poco cutre.

Insisto en que gracias por intentar ayudar.

Share this post


Link to post
Share on other sites

Hola

Lo siento, no entiendo bien tus necesidades, a ver si otro compañero lo ve mas claro

Un saludo

(De todas formas deberías subir un archivo como te dijo Macro Antonio, seguro el ya lo tendría resuelto)

Share this post


Link to post
Share on other sites

.

Si lo he entendido, yo me guardaría las filas como Range, no como número y luego:

Set Rango=Filas (0)
For x=1 To Ubound(Filas)
Set Rango=Union(Rango, Filas (x))
Next

[/CODE]

[b][u]Nota: [/u][/b]

Estás incumpliendo 2 normas básicas del foro, no subir un archivo y no etiquetar el código VBA. Te arriesgas a que cierren el tema en cualquier momento.

.

Share this post


Link to post
Share on other sites

No había leído la Nota de Macro Antonio. No he subido el archivo porque la macro que tengo, pasada a un Word para poder leerla bien, son 38 páginas.

La macro hace muchas más cosas y es difícil de seguir sin una explicación y pensé que si lo subía nadie perdería el tiempo leyendo y descifrando tanto.

Pero voy a separar el "problema" del resto de cosas que hace la macro, y lo subo.

Perdonad si he ofendido a alguien. En cuanto a lo de etiquetar el código VBA, no sé muy bien a qué os referís. Me lo podéis aclarar?

Share this post


Link to post
Share on other sites

Estoy intentando subir el archivo, tal cual lo tengo porque he pensado que hay cosas que igual le pueden servir a alguien, y si me pongo a borrar dificilmente me va a quedar sin errores. El zip pesa 355 Kb, alguna idea para poder subirlo?

Share this post


Link to post
Share on other sites

Ya imaginaba que si subía el archivo iba a ser muy farragoso e iba a espantar a la gente, por eso no lo subí en un principio. Pero independientemente de mi código, la pregunta es simple, ¿se puede crear de alguna manera un rango variable no continuo?

Gracias again

Share this post


Link to post
Share on other sites

Bueno, pues como desde que subí el archivo nadie ha contestado nada, he cambiado de estrategia y he empezado de cero.

En vez de con rangos estoy trabajando con matrices...

El tema es que no soy capaz de extraer la dirección, el índice, o como se llame, de una matriz.

Igual que en un rango, puedo buscar un valor y luego sacar la dirección de esa celda con .address, con una matriz (tipo variant) no soy capaz de hacerlo.

Si hago

x = Application.Max(Matrix)

¿Como puedo saber el indice que ocupa x dentro de la matriz?

La única solución que se me ocurre es transformar la matriz a un rango y después buscar en le rango

For Each Casilla In RngMatrix

If Casilla = x Then

Exit For

End If

Next Casilla

Msgbox Casilla.address

Pero estoy seguro que debería haber alguna función para extraer el "índice de la matriz", lo único que yo no lo encuentro.

Se agradece como siempre cualquier tipo de ayuda.

Share this post


Link to post
Share on other sites

Saludos [uSER=153025]@AJORDAN[/uSER], Amigo para uno poder recibir ayuda hay que ayudar también a la persona que quiere ayudarte, como es esto, pues muy simple:

1.- debes leer las normas del foro, allí encontraras la forma correcta de hacer tu tema, encerrar los codigos en etiquetas, etc. por lo visto no has leido las normas adecuadamente

2.- igual como lo dice en las normas, debes subir un archivo de ejemplo claro, con una estructura igual a tu archivo original, los datos puedes ser ficticios; yo baje tu archivo y de verdad que es imposible trabajar en ese archivo, son tres archivos que tienen que unirse las hojas y LAS REFERENCIAS DE LAS FORMULAS todas se perdieron, es decir, es imposible trabajar con ese archivo así como esta; nuevamente te recomiendo que leas las normas, allí te indica como subir un archivo de gran tamaña (puede ser por dropbox, drive, etc.)

3.- debe explicar de forma clara lo que deseas lograr, NO explicar tu formula, no, puede suceder que tu formula realmente no sea la adecuada, y si explicas claramente lo que quieres lograr, de seguro se puede conseguir una forma mas idonea de hacer el trabajo.

espero que leas bien todo esto, y si logras hacer todo de la forma correcta, de seguro que conseguiras ayuda, muy probablemente yo te ayude

suerte

Share this post


Link to post
Share on other sites
Guest
This topic is now closed to further replies.
Sign in to follow this  

×
×
  • Create New...

Important Information

Privacy Policy

Ayuda Excel - Madrid, Madrid, ES - Valorada por 6254 personas - Aprender Excel - Total: 4.7 / 5