Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Do while… Loop
Repite las instrucciones mientras una condición es TRUE/VERDADERO.
Ejemplo
Excel tiene valores en las celdas B1:B100. Quieres buscar la primera celda que tenga un valor más alto/igual
que 1,50.
i = 1
Do While Cells(i, 2) <> ""
f Cells(i, 1) >= 1.5 Then Exit Do
i = i + 1
Loop
MsgBox "El valor se encontró en fila no. " & i
i = la línea donde empezamos el bucle. Ponemos i = 1. Cells(i, 2) significará línea i (=1), columna 2. Es
decir celda B1. Al final del bucle, i nos dará la línea que buscamos.
Do While Cells(i, 2) <> “” significa que queremos que un bucle siga hasta que no hayan más celdas con
valores en esta columna.
Aplicamos la condición a cada celda, para luego salir del bucle (Exit Do) si encuentra un valor igual a ó más
alto que 1,50 (VBA utiliza punto en vez de coma para decimales).
Instrucción que repite las instrucciones hasta que una condición se convierta en TRUE/VERDADERO.
Ejemplo
Una hoja Excel tiene datos (en este caso nombres) en las celdas A1:A5. Queremos que el bucle pare en
“Alexis”.
A B
1 Alberto
Alejandr
2
o
3 Alex
4 Alexis
5 Allain
6
i = 1
Do Until Cells(i, 1) = "Alexis"
i = i + 1
Loop
MsgBox "El nombre Alexis se encontró en la línea " & i
i = la línea donde empezamos el bucle. Ponemos i = 1. Cells(i, 1) significará línea i (=1), columna 1.
Es decir celda A1. Al final del bucle, i nos dará la línea que buscamos.
Do Until Cells(i, 1) = “Alexis” significa que queremos que un bucle que siga hasta que encuentre la cadena
de texto “Alexis”.
Al final presentamos una caja de diálogo para presentar el resultado, cual en este caso sería 4.
While… Wend
Igual al bucle Do while… Loop.
For i… Next
Repite las instrucciones i veces.
Ejemplo
Creamos un bucle sencillo. Queremos que se repita 4 veces, y que la variable intValor (al empezar = 1) se
incremente con 2 cada vuelta. Este nos da el resultado intValor = 9 (1+2+2+2+2).
Observa que el bucle tiene step 1. Esto significa que i se incrementa con 1 cada vuelta. Esto es, que si
queremos un bucle que vaya para atrás, pondríamos step -1.
intValor = 1
For i = 1 to 4 step 1
intValor = intValor + 2
Next i
Ejemplo : En este ejemplo vamos a construir un bucle que evalua cada celda de un rango. El rango
será celdas A1:A5, que se
escribe como Range(Cells(1, 1), Cells(5, 1). Con el Exit For salimos del bucle al cumplir la condición.
Dim rngArea
rngArea = Range(Cells(1, 1), Cells(5, 1))
For Each Cell In rngArea
If Cell = "Alexis" Then
MsgBox "¡Encontró Alexis"
Exit For
End If
Next
Código vba
1. Option Explicit
2.
3. Public Sub recorrer_rango_seleccionado()
4. ' variable de tipo Range para hacer referencia a las celdas
5. Dim obj_Cell As Range
6.
7. 'Recorrer todas las celdas seleccionadas en el rango actual
8. For Each obj_Cell In Selection.Cells
9.
10. ' muestra el valor
11. With obj_Cell
12. MsgBox .Text, vbInformation, "Col " & .Column & " " & "Fila: " & .Row
13. End With
14. Next
15.
16. End Sub
Este otro ejemplo es igual , pero si el valor de la celda es de tipo númerico, lo formatea con la función
FormatCurrency, y si el valor es de tipo fecha con la función FormatDateTime
Código vba
1. Option Explicit
2.
3. Public Sub Aplicar_formato_vba()
4. ' variable de tipo Range para hacer referencia a las celdas
5. Dim obj_Cell As Range
6.
7. 'Recorrer todas las celdas seleccionadas en el rango actual
8. For Each obj_Cell In Selection.Cells
9.
10. With obj_Cell
11. ' si la celda es un valor numérico ...
12. If IsNumeric(.Text) Then
13. ' aplica formato moneda con 2 decimales
14. .Value = FormatCurrency(CDbl(.Text), 2)
15.
16. ' si la celda es una fecha
17. ElseIf IsDate(.Text) Then
18. ' fecha larga
19. .Value = FormatDateTime(.Text, vbLongDate)
20. End If
21. End With
22. Next
23. End Sub