Curso Excel VBA y Macros – Cap. 24 – Bucles Do…Loop, Do…While y Do…Until
En este tutorial veremos algunos temas interesantes, sobre todo conceptos que son muy importantes de entender si deseamos volvernos desarrolladores de aplicaciones con VBA.
Veremos el tema de la Programación estructurada y cómo nos ayuda a tener código fácil de leer y en orden. Cómo debemos evitar la instrucción GoTo para evitar el código espagueti.
También definiremos lo que son los bucles o ciclos y cuáles son los más usados para generar repeticiones de bloques de código. Los bucles más usados son:
-
For-Next
-
Do While
-
Do Until
Ver video Capítulo 24 Excel VBA & Macros
Suscríbete al canal de EXCELeINFO en YouTube para aprender más de Excel y macros.
Programación estructurada
La premisa de la programación estructurada es que un segmento de código debe tener un punto de entrada y uno de salida. Esto es para tener un mejor código estructuralmente hablando.
La recomendación es evitar a toda costa la instrucción GOTO, ya que el uso de esta instrucción provoca que tengamos el llamado código espagueti, donde no tenemos claro dónde inicia una estructura y dónde termina, además de estar brincando de una línea a otra en nuestro código.
Si vamos a utilizar la instrucción GOTO, debe ser solamente cuando deseemos tener un manejador de errores, el cual veremos en temas posteriores de este curso.
La programación estructurada nos permite tener código fácil de leer y entender.
Bucles o ciclos
En programación, un bucle es una secuencia que se repite n cantidad de veces. El bucle o ciclo se repite hasta que llega al número final o hasta que se cumpla una condición, dependiendo el bucle usado.
Los ciclos más utilizados son:
-
For-Next. Lo vimos en el capítulo 23.
-
Do While. Lo veremos en este capítulo.
-
Do Until. Lo veremos en este capítulo.
Bucles Do…Loop
Con respecto a los bucles o ciclos Do-Loop, es importante comentar que existen dos importantes, el bucle Do…While y el bucle Do…Until. En seguida veremos las diferencias entre cada uno:
-
Do-While. Repite una serie de instrucciones mientras una condición se cumpla, es decir, que sea True o VERDADERO.
-
Do-Until. Repite una serie de instrucciones hasta que una condición se cumpla, es decir, que sea True o VERDADERO.
-
While-Wend. Esta instrucción sigue vigente en VBA por temas de compatibilidad. Repite una serie de instrucciones siempre y cuando que una condición se cumpla o sea True.
Sintaxis
La sintaxis para los bucles Do-Loop es la misma, colo cambia el While por el Until. Aunque como ya vimos, las condiciones son tratadas de manera diferente.
Do [While ó Until ] condición
[ instrucciones ]
[ Exit Do ]
[ instrucciones ]
Loop
También puede usarse la siguiente sintaxis.
Do [ instrucciones ]
[ Exit Do ]
[ instrucciones ]
Loop [While ó Until ] condición
Donde:
ELEMENTO |
DESCRIPCIÓN |
condition |
Es la condición se que evaluará, podemos caracteres de comparación como =, <, >, <>. |
instrucciones |
Son las intrucciones que se repetirás mientras o hasta que la condición devuelva True o VERDADERO. |
Exit Do |
Aquí le podemos indicar que si se cumple alguna condición especial, podemos salir del bucle. |
Combinando Do-Loop con IF
En caso de que deseemos terminar el bucle, en caso de que se cumpla alguna condición, podemos usar la instrucción IF…THEN…ELSE para evaluarla, y se cumple, entonces usamos Exit Do.
Ejemplos con Do…While…Loop
Obtener el índice de color de un rango de celdas
En esta macro vamos a usar las propiedades Interior y ColorIndex para obtener el color de índice de las celdas de un rango. Usando Do While vamos a recorrer las celdas de la columna y obtendremos el color de fondo de cada celda.
Option Explicit 'EXCELeINFO 'MVP Sergio Alejandro Campos 'http://www.exceleinfo.com 'https://www.youtube.com/user/sergioacamposh 'http://blogs.itpro.es/exceleinfo Sub Do_While() Range("B16").Select Do While ActiveCell.Offset(0, -1).Value <> "" ActiveCell.Value = ActiveCell.Offset(0, -1).Interior.ColorIndex ActiveCell.Offset(1, 0).Select Loop End Sub
Usando Do Until
Usaremos la misma macro anterior, pero ahora usando Do Until.
Sub Do_Until() Range("C16").Select Do ActiveCell.Value = ActiveCell.Offset(0, -2).Interior.ColorIndex ActiveCell.Offset(1, 0).Select Loop Until ActiveCell.Offset(0, -2).Value = "" End Sub
Colorear celdas dependiendo el tipo de nomenclatura
En esta macro simularemos la nomenclatura que habitualmente se utiliza en una nómina. Se recorrerá cada una de las celdas y dependiendo el contenido o la letra, se aplicará el color de fondo.
Sub ColorearTipos() Range("A5").Select Do While ActiveCell.Value <> "" If VBA.IsNumeric(ActiveCell.Value) Then Exit Do With ActiveCell.Interior Select Case ActiveCell.Value Case "A" .ColorIndex = 50 Case "D" .ColorIndex = 2 Case "V" .ColorIndex = 3 Case "F" .ColorIndex = 46 Case Else .ColorIndex = xlNone End Select End With ActiveCell.Offset(1, 0).Select Loop End Sub
Descarga el archivo de ejemplo
024 – Bucles Do…Loop, Do…While, Do…Until – EXCELeINFO.zip
Si te gustó este tutorial por favor regístrate en nuestra Lista de correo y Suscríbete a nuestro canal de YouTube para que estés siempre enterado de lo nuevo que publicamos.