USO DE LA DECLARACION FOR ... NEXT

Bien. En la sección anterior codificamos un procedimiento que puede ser muy util en el caso de los registros de venta. Por cada cliente que compra una cantidad determinada (Cant) de un producto (NomProd), a un precio unitario PrecioUnit, calculamos el monto de la venta (MontoVenta) y le aplicamos el IGV de 17% para calcular el Monto neto (MontoNeto). Eso es lo que hace la macro de la sección anterior. Y lo hace muy bien.

Pero encontramos algunas debilidades a nuestra primera macro MiMac04. Primera debilidad: Cada vez que se realiza una nueva venta se debe ejecutar la macro y lo ingresado y calculado del producto anterior se pierde en el limbo. Segunda debilidad: ¿Cómo guardar todo lo que captamos de cada venta para obtener nuestro listado o archivo de las ventas? La segunda lo haremos más tarde.

En cuanto a la primera, si queremos que la macro vuelva a pedir los datos de la siguiente venta, debemos ser capaces de decirle que repita las mismas acciones con la siguiente y las siguientes ventas.

Si fueran 5 ventas, quisiera decirle que repita el procedimiento 25 veces y termine.

Si quisiéramos ingresar los datos de 25 ventas, debemos ser capaces de decirle que ejecute el procedimiento 25 veces. Para esto se dispone de la sentencia FOR ... NEXT

Sintaxis:

For Var1 = Var2 To Var3 [Step Var4]
...
...
Next [Var1]
donde Var1, Var2, Var3 y Var4 son nombres de variables numéricas.

Esta sentencia ejecuta todas las instrucciones contenidas al interior del ámbito (desde For hasta Next) y las repite hasta que Var1 sea mayor que Var3, en cuyo caso da por terminado la repetición y continúa con la siguiente línea del programa. El primer valor que toma Var1 es Var2; cada vez que vuelve a ejecutar las sentencias incrementa el valor de Var1 en Var4 veces y pregunta si ya es mayor que Var3; si no lo es, repite la iteración./p> Ejemplo 1
For i = 1 to 5
x = InputBox("Dato: ")
MsgBox(" " & x)
Next

Este segmento de programa pide un dato para x e imprime su valor 5 veces.
Cuando i = 1, pide el dato, lo guarda en x y luego lo imprime
Cuando i = 2, pide el dato, lo guarda en x y luego lo imprime
Cuando i = 3, pide el dato, lo guarda en x y luego lo imprime
Cuando i = 4, pide el dato, lo guarda en x y luego lo imprime
Cuando i = 5, pide el dato, lo guarda en x y luego lo imprime

En cada iteración, antes de pasar a pedir dato, incrementa a i en uno y compara si i es mayo a 5. Esto ocurre cuando i = 6. En este caso termina el loop dl For ... Next.

Observe que no hemos puesto Step. En cuyo caso el incremento es unitario. Y en Next no hemos puesto Next i.

Note también que MsgBox, imprime un mensaje vacío y luego el valor de x.

Ejemplo 2
n = 12
For i = 1 to n
x = InputBox("Dato: ")
MsgBox(" " & x)
Next

Este ejemplo ejecuta las dos instrucciones n veces, pero como puede apreciar, n vale 12; por tanto, lo ejecuta 12 veces.

Si deseamos que el programa ejecute un número variable de veces, dicho número debemos ingresarlo por teclado, usando InputBox().

Ejemplo 3
n = Val(InputBox(Ingresa el valor de n: ")
s = 0
For i = 1 to n
s = s + i
next i

En este ejemplo se ingresa el número de veces que se debe añadir a s el valor variable de i (que se incrementa de uno en uno hasta llegar a n).
 

Bueno, apliquemos esto a un caso más formal.

Abra el archivo "Mis Macros.xlsm" grabado en la sesión anterior. Si no lo tiene, haga clic

aquí

Vaya al editor usando [Alt]+[F11]. Haga doble clic en "Módulo1" de la carpeta "Módulos" de la ventana de proyectos.

Allí se encuentra nuestra macro anterior llamada MiMac03.

Trate de identificar, todas las líneas del programa que se deben ejecutar repetidamente, si se trata de procesar varias ventas.

Según el enunciado del problema, dado en la sesión anterior, debemos leer el nombre del producto, cantidad y precio unitario, para luego calcular el Monto de venta y el Monto neto.

Al terminar de imprimir en pantalla, habremos terminado con una venta.

Esto significa que para otra venta debe repetirse desde la línea de ingreso del nombre del producto hasta el último MsgBox.

Esto significa que, antes del primer InputBox, debemos colocar la lectura de un valor para n, que nos servirá para repetir n veces el procedimiento.

Luego de la lectura de n y antes del InputBox debemos colocar el FOR ... y después del último MsgBox, colocar el NEXT.

Bien, dicho esto procedamos. Pero, para no malograr nuestra macro anterior, vamos a duplicarla llamándola MiMac04.

Entonces, dos líneas por debajo del End Sub de la macro MiMac03, digite:
Sub MiMac04 y presione [Intro]
Vaya a MiMac03 y seleccione todo el contenido, copie y pege en el interior de la macro MiMac04.
 

Trabajemos en la nueva macro

Por encima de: NomProd = InputBox("Nombre del producto"), presione [Intro] para insertar una nueva lpinea y digite:
n = Val(INputBox("Ingrese el número de ventas a ser procesadas")
A continuación, digite:
FOR i = 1 to n
Después de la última senetencia:
MsgBox ("Monto neto: " & MontoNeto), presione [Intro] para abrir una nueva línea y digite:
Next

Antes de ejecutarlo, vamos a grabar la modificación del libro. Esto lo haremos sin salir del editor. Haga clic en el comando [Archivo]; haga clic en [Guardar MisMacros.xlsm].

Ahora, estando el cursor dentro de la nueva macro, use la tecla F5 o haga clic en el pequeño triángulo de la barra de herramientas.

Ingrese un valor para n, que puede ser 2, 3 ó el número que Ud. desee. Después de ingresar nombre, cantidad y precio, imprimirá monto de la venta y monto neto y volverá a pedir nombre del producto, cantidad y precio unitario. Esto lo hará tantas veces como lo ha indicado Ud. al digitar el valor para n.

Grabe el archivo con el mismo nombre.
 

En la siguiente sesión veremos una aplicación estadística usando FOR ... NEXT. Para ello haga clic aquí