La estructura Do... Loop, se utiliza cuando se requiere repetir instrucciones en un número indefinido de veces, hasta que cumpla una condición.
También debemos considerar ciertas pautas con la finalidad de evitar posibles errores.
Para entender mejor esta estructura, aplicare el siguiente ejemplo:
Si tenemos un grupo de máquinas que va a trabajar a una determinada altura, Debemos considerar que si la altitud del lugar de operación es mayor a 1,500 msnm se debe preparar el equipo para trabajos en altura, es decir "pedir los repuestos" necesarios para la instalación del sistema de arranque en frío. Si va a una altura inferior a 1,500 "No considerar".
Para que se repita las indicaciones señaladas aplicaremos:
Sub preparacion()
x = 2
a = Cells(x, 2)
Do While Cells(x, 2) <> ""
If Cells(x, 2) > 1500 Then
Cells(x, 3) = "pedir repuestos"
Else
Cells(x, 3) = "No considerar"
End If
x = x + 1
Loop
End Sub
Para ejecutar mejor la macro colocaremos también un botón, que permitirá actualizar los datos mientras vamos ingresando la información
Private Sub CommandButton1_Click()
Call preparacion
End Sub
(Para mayor visualización de la imagen, hacer click en la misma)
14/02/2016 a las 2:09 am
Muchas gracias por el artículo, me encanta la página. Quería saber si me podías ayudar con este codigo. (Lo tengo "resuelto", pero tengo una duda sobre el Do While Loop).
IDEA: buscar en una columna de datos la última celda vacía y pegar un valor. Lo hago con un Loop porque es un rango dinámico, todos los meses se incorporan valores nuevos.
Mi solución (Nota: soy principiante en programación, apenas dos meses).
*************
Sub ejercicio3()
Dim i As Long
i = 0
'Se loopea por un rango de celdas hasta que encuentre una celda vacía
Do Until IsEmpty(Cells(i + 1, 1)) = True
i = i + 1
If IsEmpty(Cells(i + 1, 1)) = True Then
Cells(i + 1, 1).Value = "test"
Exit Sub
End If
Loop
End Sub
========= *** =========
MI PREGUNTA:
No me queda claro el porqué cuando incorporo el contador (i = i + 1) al final (entre el END IF y el LOOP), en lugar de al principio (como está ahora, justo luego del DO UNTIL), no funciona el código.
Casi siempre veo que en DO WHILE/UNTIL ponen el contador al final, y no al principio.
No funciona asì:
*************
Sub ejercicio4()
Dim i As Long
i = 0
Do Until IsEmpty(Cells(i + 1, 1)) = True
If IsEmpty(Cells(i + 1, 1)) = True Then
Cells(i + 1, 1).Value = "jeje"
Exit Sub
End If
i = i + 1
Loop
End Sub
========= *** =========
MUCHAS GRACIAS!
PD. ya vi este post https://www.excel-avanzado.com/2791/identificar-la-ultima-fila-en-uso-con-vba.html