Saltar al contenido

Como usar la instruccion Do … Loop While en macro de Excel


.

La instrucción Do … Loop While sirve para realizar un bucle, en una macro de VBA, es decir realizar un mismo procedimiento un número indeterminado de veces, se puede usar de dos formas una es estableciendo la condición para realizar el bucle, al principio o también puede ser al final, al diferencia es que si While está al final, el bucle por lo menos se realizará una vez. Difiere de la instrucción Do … Loop Until en que el bucle se realiza siempre mientras la condición sea verdadera y en Do … Loop Until se realiza el bucle mientras la condición siga siendo falsa.

Antes de seguir recomiendo que leas un excelente libro sobre Excel el que te ayudará operar las planillas de cálculo, haz click acá, si quieres un libro sobre Excel, en inglés, entonces debes hacer click acá. Si lo que necesitas es aprender o profundizar sobre la programación de macros con VBA este es unos de los mejores cursos on line que he visto en internet.

Como ya se dijo Do… Loop While el bucle se ejecuta mientras la condición sea verdadera, tiene dos formas de uso, se puede verificar la condición antes de ingresar a realizar el bucle, tendrá la siguiente estructura:

Do While cells (x,1) = empty

instrucciones

x=x+1
Loop


Esta es una estructura clásica para recorre las celdas del libro de Excel, es decir While analizará si la celda que se está recorriendo en cada momento es vacía, es decir se llegó a la última fila con datos, en ese caso deja de realizar el bucle.

También se puede usar While al final, la diferencia es que en este caso el bucle por lo menos se realiza una vez, la estructura sería la siguiente:

Do

instrucciones

x=x+1
Loop While cells (x,1) = empty

En este caso se ingresa al bucle, se realiza una vez y se analiza la condición si es verdadera sigue, hasta que se haga falsa, en este caso se hará falsa cuando llegue a la última fila con datos, cada vez que el bucle realice un recorrido, en este ejemplo a la variable «x» se le suma uno, lo que representa que en el recorrido siguiente del bucle debe analizar la fila posterior y así sucesivamente hasta la última fila con datos, donde se analizará la condición y será falsa, por ende el bucle terminará.

En el ejemplo que se presenta, usa la instrucción Do … Loop While, la macro permite sumar todas las celdas de un mismo color o lo que es lo mismo muestra como sumar celdas dependiendo de su color, verás como se usa la instrucción Do… Loop While para recorrer de la primera a la última fila con datos, a través de la instrucción If Then Else End If, se determinar el color de la celda y se suma en caso de corresponder, cuando el bucle llega al final, analiza si la celda que sigue es menor a la última celda con datos, en caso verdadero sigue en caso falso termina el bucle.

Do

If Cells(pf, «C»).Interior.Color = 255 Then conta1 = conta1 + Cells(pf, «D»).Value

If Cells(pf, «C»).Interior.Color = 15773696 Then conta2 = conta2 + Cells(pf, «D»).Value

pf = pf + 1
Loop While pf <= uf

Desde el link del final se puede descargar cientos de macros que puedes adaptar a tu proyecto, su uso es libre, si te fueron de utilidad considera la posibilidad de invitarme una tasa de café para seguir subiendo cosas útiles.

Suscribe a nuestro canal de You Tube para recibir en tu correo vídeos explicativos sobre macros interesantes, como  por ejemplo formulario que crea un listado de todas las hojas para poder luego seleccionarlas, buscar en listbox mientras escribes en textbox, ordenar hojas libro excel por su nombre, conectar Excel con Access y muchos ejemplos más.

Código que se inserta en un módulo

Sub DarFormato()
Application.ScreenUpdating = False
Dim conta1 As Integer, conta2 As Integer
c1 = Range(«C2»).Interior.Color
c2 = Range(«C3»).Interior.Color
pf = 2
uf = Range(«C» & Rows.Count).End(xlUp).Row
conta1 = 0
conta2 = 0
Do
If Cells(pf, «C»).Interior.Color = 255 Then conta1 = conta1 + Cells(pf, «D»).Value
If Cells(pf, «C»).Interior.Color = 15773696 Then conta2 = conta2 + Cells(pf, «D»).Value
pf = pf + 1
Loop While pf <= uf
Range(«D16») = conta1
Range(«D17») = conta2

Application.ScreenUpdating = True
End Sub
Sub borraformato()
Application.ScreenUpdating = False
Range(«D16:D17»).Clear
Application.ScreenUpdating = True
End Sub

Si te fue de utilidad puedes INVITARME UN CAFÉ y de esta manera ayudar a seguir manteniendo la página, CLICK para descargar en ejemplo en forma gratuita.


.

If this post was helpful INVITE ME A COFFEE and so help keep up the page, CLICK to download free example.

Si te gustó por favor compártelo con tus amigos
If you liked please share it with your friends