Hemos visto que el uso de la For ... Next, nos permite ejecutar todas las órdenes incluidas en el ámbito del For ... Next. Esto lo hace un número de veces fijo. Por ejemplo, si deseo que lo haga 13 veces, uso
For k = 1 To 13
....
Next
Si deseo repetir un número diferente de veces cada vez, primero leo un valor para una variable, digamos r, entonces uso:
r = Val(InputBox("Digita el número de veces"))
For i = 1 To r
...
Next
¿Y si quisiera que repita un número indeterminado de veces? Es decir, si estoy digitando líneas de datos y quiero dar por terminado en cualquier momento?
Para ello, podemos pedirle que repita la secuencia, mientras se cumple alguna condición.
Eso significa dos cosas: Si se cumple cierta condición, que siga ejecutando; o que vuelva a ejecutar, hasta que cierta condición se cumpla.
Si se cumple la condición entonces que ejecute, se realiza mediante la sentencia WHILE ... WEND.
Que vuelva a ejecutar hasta que se cumpla la condición, se realiza mediante la sentencia DO .... LOOP UNTIL.
Sentencia While ... WEnd
Sintaxis:
While Condición
....
WEnd
Mientras la evaluación de la expresión "Condición" resulte verdadera, se pasa a ejecutar las instrucciones que están al interior del While (hasta antes del Wend). Si no lo es, vuelve a repetir la ejecución de la instrucciones. La expresión "Condición" debe ser actualizada, de otra manera, la instrucciones se ejecutarán indefinidamente y se "colgará" el computador.
Sentencia DO ... Loop Until
Sintaxis:
Do
....
...
Loop Until Condición
Ejecuta las instrucciones contenidas al interior del Do ... Loop Until hasta que la evaluación de "Condición" sea verdadera. Si no lo es, vuelve a repetir la ejecución de la instrucciones. La expresión "Condición" debe ser actualizada, de otra manera, la instrucciones se ejecutarán indefinidamente y se "colgará" el computador.
Ejemplos:
Si se desea leer 10 números y calcular su suma:
Usando For tenemos:
Sub Ej01For()
S = 0
For k = 1 To 10
x = val(InputBox("Dato"))
S = S + x
Next
MsgBox "La suma es: " & S
Como ve, pedirá necesariamente 10 veces que se ingrese datos y luego emitirá la suma en la pantalla.
Ahora, hagamos lo mismo usando While.
Sub Ej01While()
S = 0
K = 1
While K<11
x = val(InputBox("Dato"))
S = S + x
K = K + 1
WEnd
MsgBox "La suma es: " & S
End Sub
En este ejemplo, Como K es 1, la condición se cumple, por tanto pasa a pedir que se ingrese un número y sumará su valor a S. Luego del cual, K pasa a ser 2. Al encontrar a WEnd, se repite el proceso, ahora K vale 2, pero sigue siendo menor que 11. Esto lo repetirá hasta que K sea 11. Cuando retorne a evaluar la condición, comprbará que K no es menor a 11, en cuyo caso ejecutará la instrucción MsgBox.
Vemos ahora cómo cambia el código cuando se quiere hacer lo mismo pero usando DO ... Loop Until.
Sub Ej01Do()
K = 1
Suma = 0
Do
x = Val(InputBox("Dato"))
S = S + x
K = K +1
Loop Until K >3
MsgBox "La suma es: " & S
End Sub
Observe que, a diferencia del While, donde primero se controla y luego se ejecuta, en el Do se ejcuta primero y después se controla.
Abra el archivo MisMacros.xlsm o haga clic aquí
En la siguiente imagen se muestra estos tres procedimientos
En la siguiente sesión veremos otra aplicación del uso de otra declaración codicional, para ello haga clic aquí