Jump to content
  • Debido a la crisis sanitaria, hasta el día 31 de marzo, el registro al foro de Ayuda Excel será totalmente gratuito para facilitar el teletrabajo. Todos los registros que se produzcan entre estas fechas tendrán acceso gratuito ilimitado a la comunidad hasta el 30 de abril.

    Regístrate

    Si te surge alguna duda mientras estás trabajando en casa con Excel, ya tienes a quien preguntar.

    Espero que esta medida te sirva de ayuda. Frenar la expansión del coronavirus depende de todos. Sé responsable.

Sign in to follow this  
Guz Man

Do while - until loop - sintaxis

Recommended Posts

Quería saber si me podían ayudar con este codigo.

(Lo tengo “resuelto”, pero tengo una duda)

.

IDEA: buscar en una columna de datos la última celda vacía y pegar un valor. Se que hay otros métodos para hacer esto, pero era un reto personal.

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[/CODE]

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í:

[CODE]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

If IsEmpty(Cells(i + 1, 1)) = True Then
Cells(i + 1, 1).Value = “test”
Exit Sub
End If

i = i + 1

Loop

End Sub[/CODE]

Alguna idea?

MUCHAS GRACIAS!

Share this post


Link to post
Share on other sites

Hola Guz Man

No funciona porque el contador se lo pasas después del IF, por eso DO UNTIL no llegara a la celda vacía

Ya que eres principiante, siempre prueba el paso a paso (con F8), ademas ese método no es el mejor para ubicar la ultima celda vacía

Saludos

Share this post


Link to post
Share on other sites

hola, a todos !

1) cuando declaras una variable, esta ya se inicializa con un valor establecido según su tipo, en tu caso, con la instrucción: Dim i As Long "i" ya tiene un valor inicial de 0 (cero)

2) la siguiente instrucción: i = 0 <=> no es necesaria, es mas, la asignación de su primer valor debiera ser: i = 1

3) lo anterior debido a que no existe una referencia 0 (cero) ni para la fila ni para la columna en Cells(i, 1) y te evitas usar repetidas veces el "i = i + 1"

4) la estructura "If...End" If tampoco es necesaria puesto que el bucle (por si solo) se detendrá cuando encuentre una celda vacía con lo cual, el valor de "i" será el numero de su fila

(a menos que busques otro tipo de comparación condicionada a... ???)

5) si prefieres la estructura Do While|Unitl...Loop o bien Do...Loop While|Until (ya es cuestión de usos y costumbres ?)

ejemplos:

Sub prueba()
Dim i As Long
i = 1
Do Until Cells(i, 1) = Empty
i = i + 1
Loop
MsgBox "la fila vacia en la columna A es: " & i
End Sub
Sub prueba2()
Dim i As Long
i = 1
Do
i = i + 1
Loop Until Cells(i, 1) = Empty
MsgBox "la fila vacia en la columna A es: " & i
End Sub
Sub prueba3()
Dim i As Long
i = 1
Do While Cells(i, 1) <> Empty
i = i + 1
Loop
MsgBox "la fila vacia en la columna A es: " & i
End Sub
Sub prueba4()
Dim i As Long
i = 1
Do
i = i + 1
Loop While Cells(i, 1) <> Empty
MsgBox "la fila vacia en la columna A es: " & i
End Sub[/CODE]

saludos,

hector.

Share this post


Link to post
Share on other sites

esta es otra forma, la macro evalua primero el area de datos de cualquier celda que elijas de cualquier hoja, si no encuentra ningun dato coloca la palabra test, en caso contrario se va directo a la siguiente linea vacia despues de la ultima linea con datos y escribe la palabra test.

Sub ejercicio3()

Set x = Range(ActiveCell.Address).CurrentRegion

filas = x.Rows.Count

If filas = 1 And x.Cells(1, 1) = Empty Then

x.Cells(1, 1) = "Test"

Else

x.Cells(x.Rows.Count + 1, 1) = "Test"

End If

End Sub

Share this post


Link to post
Share on other sites
IDEA: buscar en una columna de datos la última celda vacía y pegar un valor.

Ejemplo la "A" lo haría de este modo:

Dim Uf As String

With Hoja1

    Uf = .Range("A" &amp; Rows.Count).End(xlUp).Row + 1

    .Range("A" &amp; Uf) = "Test"

    MsgBox "Dato Cargados.", vbInformation, "List0."

End With

Share this post


Link to post
Share on other sites

Hola, muchísimas gracias por sus comentarios. Qué gran foro!!

Estaré revisando sus consejos y ejemplos. No respondo ahora en mayor profundidad pues me tomará un tiempito entenderlo.

PS. Se que no es la mejor manera para encontrar la celda vacía, ya había usado otro procedimiento. Este caso fue como un reto personal. Quería practicar el Do Until y fue lo único que se me ocurrió !!! jaja

GRACIAS :)

Share this post


Link to post
Share on other sites
Guest
This topic is now closed to further replies.
Sign in to follow this  



×
×
  • Create New...

Important Information

Privacy Policy


CTA Templates.png