Está en la página 1de 4

VBA bucles Intro

Para qué sirven los bucles


Los bucles sirven para repetir instrucciones varias veces. A lo mejor tienes una columna en Excel con
25.000 nombres, y quieres sacar las personas cuyos apellidos empieza con “Lo”. En este caso se puede
emplear un bucle que evalua todos estos nombres según el criterio “Lo”, uno por uno.

Hay dos tipos generales de bucles:

Para qué sirven los bucles


Los bucles sirven para repetir instrucciones varias veces. A lo mejor tienes una columna en Excel con
25.000 nombres, y quieres sacar las personas cuyos apellidos empieza con “Lo”. En este caso se puede
emplear un bucle que evalua todos estos nombres según el criterio “Lo”, uno por uno.

Bucles Do… Loop


Repite las instrucciones mientras/hasta etc. una condición es TRUE/VERDADERO.

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).

Al final devolvemos un Messagebox para presentar el resultado.


Do until… Loop
Repite las instrucciones hasta que una condición se convierta en TRUE/VERDADERO.

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.

Bucles For… Next


Repite las instrucciones un número especificado de veces.

For i… Next
Repite las instrucciones i veces.

Esta instrucción se repite el número de veces (i) que tú indicas.

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

For each… Next


Repite las instrucciones según el número de objetos especificados, por ejemplo For each cell de un rango en
Excel.

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

Ejemplo que recorre mediante un bucle For Each el rango


actualmente seleccionado en una hoja de Excel
Lo siguiente recorre los valores y muestra un mensaje con el valor

Código vba

Texto planoCopiar código fuenteImprimir

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

Texto planoCopiar código fuenteImprimir

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  

También podría gustarte