En programación en general y el VBA en particular los bucles son métodos muy utilizados. Un ejemplo clásico de bucle es el For Next (puedes ver más información aquí). En este tutorial explicaremos cómo se usa el bucle Do While en VBA.
Sintaxis y funcionamiento
El funcionamiento del bucle Do While en VBA es muy sencillo, repetiremos una acción tantas veces que sea necesario siempre y cuando se evalúe una condición. Por ejemplo, iremos avanzando a lo largo de una columna por todas sus celdas e iremos sombreando en amarillo hasta que una celda sea mayor que un valor dado.
La sintaxis puede resultar un poco compleja inicialmente, pero una vez que veamos algunos ejemplos quedará perfectamente. La sintaxis se compone de la siguientes partes
Do While Mi_expresion [Nuestro código 1] [Exit Do] [Nuestro código 2] Loop
o también de la forma
Do [Nuestro código 1] [Exit Do] [Nuestro código 2] Loop While Mi_expresion
Donde en el primer caso evaluaremos inicialmente la expresión que queremos del tipo verdadero o falso y en el segundo caso lo evaluaremos después. Esto nos permitirá jugar un poco con el bucle.
Recordemos que:
- Lo que esté en corches no es fundamental
- Mi_expresión: es una condición lógica que devuelve verdadero o falso. Si se evalúa como verdadero el bucle continuará, sino, se terminará.
- Exit Do: nos permitirá salir del bucle en cualquier momento dada una condición (por ejemplo si hemos repetido el bucle mil veces)
- Nuestro código 1 o 2: este será el código que ejecutemos dentro del bucle. Puede ponerse antes, después o en ambas posiciones respecto del Exit Do.
Ejemplos del bucle Do While en VBA
A continuación vamos a ver una serie de ejemplos que queremos para que se pueda entender mejor cómo funciona el bucle Do While en VBA.
Ejemplo 1
En este ejemplo vamos a sombrear en amarillo las celdas del rango que sean uno hasta que dejen de serlo.
Dim mi_rango, c As Range Set mi_rango = Range("a1:a10000") Set c = mi_rango(1) Do While c.Value = 1 c.Interior.Color = vbYellow Set c = c.Offset(1, 0) Loop
Ejemplo 2
En el siguiente ejemplo vamos a sombrear en amarillo todas las celdas que sean menores que 100, pero si encontramos una celda menor que 50 saldremos del bucle:
Set c = Range("b1") Do While c.Value < 100 If c.Value < 50 Then Exit Do 'salgo del bucle c.Interior.Color = vbYellow Set c = c.Offset(1, 0) Loop
Ejemplo 3
En este tercer ejemplo vamos a poner a la derecha de la celda que se está evaluando un OK si evaluamos que su valor es menor que 100 y mayor que 50. Esto nos permitirá ver que en la condición lógica que vamos a evaluar podemos utilizar el and para hacer una doble evaluación.
Set c = Range("c1") Do c.Offset(0, 1) = "OK" Set c = c.Offset(1, 0) Loop While c.Value < 100 And c.Value > 50
Ejemplo 4
En el siguiente ejemplo vamos a ver cómo se puede también utilizar un expresión anidada con Or para evaluar una condición.
Set c = Range("e1") Do While c.Value > 60 Or c.Value < 20 c.Offset(0, 1) = "OK" Set c = c.Offset(1, 0) Loop
En el siguiente enlace podéis descargar un libro de Excel con los ejemplos que hemos visto del bucle Do While en VBA para Excel:
Ejemplos del bucle Do While en VBA