bucles anidados

07/05/2004 - 11:01 por Jesús Román | Informe spam
Hola !!
Despues de mucho meneo y exfuerzo he conseguido anidar bucles... joels! y
ahora parece tan sencillo...

pero despues de los bucles me doy cuenta de que la macro aun siendo casi
perfecta no cumple con los requisitos que deseo y no se como prantearlos.
abajo planteo dos ejemplos y tambien despues expongo la macro.
La cuestion es la siguiente:
la cifra 49.79 da señal porque hay un numero negativo en el "ejemplo 1",
pero en el ejemplo 2 aunque tenemos tambien tenemos un numero negativo, pues
me gustaria que no diera señal pues tenemos antes del negativo un numero
superior a 25 que segun la macro seria falso

los dos bucles van del 1 al 13, y la cuestion seria que si el bucle primero
(en distancia del 1 al 13) da falso, antes que el otro, pues el verdadero
del segundo no me valga.

como no se si aun me he dado a enteder, pues ni yo mismo se si me entiendo,
lo explico de otra forma mas
Si los dos bucles fueran simultaneos (cosa que creo que no) que se me
ejecutara solo el que llegue antes a la solucion en tiempo de contador. Si
bucle 1 cumple condicion en fila 3 y bucle 2 cumple condicion en fila 10,
que sea el bucle 1 el que nos de la razon.

Gracias.-


ejemplo1


Km/h.
49,78
20,13
17,68
9,59
4,10
-2,85
10,11
22,70
25,61
33,13
30,06
10,07
13,09

******************
******************
ejemplo2


Km/h.
49,78
25,33
17,68
9,59
4,10
-2,85
10,11
22,70
25,61
33,13
30,06
10,07
13,09






Sub KilometrosHora25(ByVal i As Integer)
Dim EsValido As Boolean
Dim j As Integer
Dim k As Integer
If Range("CN" & i).Value > 25 Then
EsValido = True
For j = 1 To 13
If Range("CN" & i + j).Value > 25 Then
EsValido = False
End If
For k = 1 To 13
If Range("CN" & i + k).Value < 0 Then
EsValido = True
End If
Next k
Next j
If EsValido = True Then
Call bordecelda("CN" & i, "grueso", "morado")
Call ponercomentario("25 Km/h. Vender", "CN", i)
Selection.Interior.ColorIndex = 7
Range("D1").Select
Selection.Interior.ColorIndex = 7
End If
End If
End Sub
 

Leer las respuestas

#1 Héctor Miguel
07/05/2004 - 21:16 | Informe spam
hola, Jesús !

... he conseguido anidar bucles... joels! y ahora parece tan sencillo...
... la macro aun siendo casi perfecta no cumple con los requisitos que deseo [...]
... los dos bucles van del 1 al 13 ... que si el bucle primero ... da falso ... el ... segundo no me valga [...]
... que se me ejecutara solo el que llegue antes a la solucion en tiempo de contador [...]



=> 'aprovechando' que la variable booleana [EsValido] se establece en 'True' al 'arrancar' los bucles...
=> cambia la 'comparacion' para 'buscar' SOLO cuando se 'deba' evaluar como =>falso< 1.- en el primer bucle [el 'j'], =>despues<= de establecer la variable como falso...
=>agrega una 'salida' del bucle ->'Exit For'<- [para que NO se 'ejecute' ya el segundo]
2.- en el segundo bucle [el 'i']...
a) cambia la 'comparacion' para cuando 'deba' evaluarse como falso [p.e. If...Value >= 0 Then]
b) =>agrega [tambien] una 'salida' del bucle ->'Exit For'<- [para que NO 'tenga que'... seguir hasta el final]

¿comentas?
saludos,
hector.

Preguntas similares