Las estructuras de control son lineas de código con las cuales es posible modificar el flujo del programa, por ejemplo las estructuras de toma de decisión como If, si es verdadera ejecuta determinada acción y otra en caso contrario, o puede no hacer nada simplemente. Podemos dividir las estructuras de control como: estructuras de repetición, estructuras de decisión. En este post explicaré acerca de las estructuras de repetición.

La primera estructura de repetición tenemos:

1. Bucles For
For…Next, con el siguiente ejemplo explicaré esto y de paso sirve para explicar otras cosas más:

[code lang=”vb”]
Sub PruebaForNext()
Dim i as integer
Dim rg as range
Set rg=Range("A1:A10")
For i=1 To rg.Count
rg(i).Value = i
Next i
End Sub
[/code]

Este ejemplo escribe a lo largo del rango A1:A10 el número de fila de cada uno de ello, esto lo realiza el Bucle For utilizando la propiedad Value de rg(i). En este bucle se necesita que haya un contador, en este caso “i” y también un umbral superior que indique hasta que valor del contador se va a repetir. En este caso el incremento del contador es de uno en uno. En el ejemplo el contador ira desde 1 hasta rg.Count, rg.Count es la propiedad que devuelve cuantas celdas tiene un rango en este caso 10.

En el ejemplo anterior, si quisieramos que sólo se escriba el número de fila en las celdas impares, habría que recorrer: 1,3,5,7 y 9. Vemos que el incremento es de 2 en 2. Esto se hace agregando la palabra clave Step. En el ejemplo:

[code lang=”vb”]
Sub PruebaForNextStep()
Dim i as integer
Dim rg as range
Set rg=Range("A1:A10")
For i=1 To rg.Count Step 2
rg(i).Value = i
Next i
End Sub
[/code]

También se podría ir hacia atrás haciendo For i=10 to 1 Step -1

Finalmente una estructura de repetición que puede ser muy útil cuando se quiere buscar entre un rango de celdas o una selección. El bucle For Each, sirve para recorrer los objetos de una colección de excel. En forma genérica:

[code lang=”vb”]
For Each Objeto in ObjetoColeccion
‘Aqui va el código
Next Objeto
[/code]

Ejemplo, mateniendo seleccionado el rango A1:A10 y B2:C14, ejecutar:

[code lang=”vb”]
Sub PruebaForEach()
Dim i as integer
i = 1
For Each cell in Selection
cell.Value = i
i=i+1
Next cell
End Sub
[/code]

Vemos que ha rellenado los número en todas las celdas seleccionadas. En el ejemplo Selection hace referencia al rango de
celdas seleccionado como vemos puede ser una selección multiple.

2. Bucles Do
En forma general:

[code lang=”vb”]
‘Primera Forma
Do {While \ Until} condición
‘código aquí
Loop

‘Segunda Forma
Do
‘código aquí
Loop {While \ Until} condición

‘Tercera Forma
Do {While \ Until} condición
‘código aquí
Loop
[/code]

En la primera forma mostrada, evalua en primer lugar la condición y de ser verdadera ejecuta el código dentro de Do, por tanto no necesariamente se ejecutará. En cambio la segunda forma ejecuta al menos una vez, la primera, la tercera es un bucle sin condiciones. Veamos el ejemplo:

[code lang=”vb”]
Sub PruebaDoWhile()
Dim i as integer
i = 1
For Each cell in Selection
Do While i<10
cell.Value = i
i=i+1
Loop
Next cell
End Sub
[/code]

En el ejemplo mostrado, las sentencias dentro de Do While, se ejecutarán hasta que i=10. De manera similar se usar Until. Antes de terminar haré mención sobre las palabras clave Exit For y Exit Do, estas sentencias sirven para terminar un Bucle For o Do respectivamente. Pueden ser usadas digamos cuando se ha cumplido cierta condición y no es necesario que el bucle continúe.

Espero les haya servido. En el siguiente post explicaré acerca de las estructuras de control If y Switch.

Estructuras de control en Excel VBA – I

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *