Me gusta más usar el For Next, en la misma línea le indicas de dónde a dónde quieres el ciclo
For i = 1 to 10 (va desde 1 hasta 10, de uno en uno)
También le puedes indicar que avance de 3 en 3
For i = 1 to 10 step 3 (va desde 1 hasta 10, de tres en tres)
For i = 1 To 10
'sentencias
Next
El ciclo Do While, se me hace más complejo, y ocupas más líneas:
i = 1
Do While True
If i > 10 Then Exit Do
i = i + 1
'sentencias
Loop
Tienes que ser cuidadoso cuando utilizar un Do While, porque puede entrar en un loop si fin.
Otra forma es:
i = 1
Do While i < 11
i = i + 1
'sentencias
Loop
Si los revisas en ambos casos tienes que indicar cuánto vale i, la condición y aumentar i en líneas diferentes, mientras que en el For, todo va en una línea.
El mismo ejemplo pero con el ciclo Do Loop
i = 1
Do
i = i + 1
'sentencias
Loop While i < 11
Con While Wend
i = 1
While i < 11
i = i + 1
'sentencias
Wend
Utilizo el For para realizar el ciclo de todas las filas desde una fila inicial hasta la última fila con datos:
for i = 2 to range("A" & rows.count).end(xlup).row
Pero hay casos en formatos establecidos que no necesariamente se tiene que recorrer hasta la última fila con datos, solamente se recorre un rango hasta encontrar un vacío, en ese caso utilizo el Do While:
En la imagen anterior si utilizo el For, estaría recorriendo las filas desde la 2 hasta 11.
Para eso empleo un Do while, para que recorra las filas de la 2 a la 4
i = 2
Do While Cells(i, "A") <> ""
'sentencias
i = i + 1
Loop
Cuando el contador i llega a 5 la celda A5 es igual a vacío, entonces el ciclo termina.
Si conoces el inicio y el fin, puedes utilizar un For, pero si no conoces el fin porque depende de una condición, entonces utilizar el Do While, el ciclo se ejecutará hasta que se cumpla la condición.
Otro ejemplo para utilizar el Do Loop, es cuando quieres repetir la búsqueda de un dato en la hoja:
celda = b.Address
Do
‘detalle
Set b = r.FindNext(b)
Loop While Not b Is Nothing And b.Address <> celda
El ciclo se repite hasta que ya no encuentra datos. Similar al caso anterior, no conozco el fin, entonces utilizo un ciclo hasta que se cumpla la condición.
sal u dos