Lección 16: Iteraciones con macros. Función FOR.

Escrito por Administrador

24 de agosto de 2021

En esta lección vas a aprender a utilizar la función FOR para realizar bucles o iteraciones. Después de la función IF, es la más importante y seguramente será indispensable en la mayor parte de macros que programes.

Con ella seremos capaces de recorrer las filas o columnas de una hoja buscando un dato o de realizar la misma operación las veces que deseemos.

La sintaxis de la función FOR está formada por varios comandos y es la siguiente:

For i = inicio to final

‘Acciones a realizar

Next

Las variables inicio y final marcan desde qué número comenzamos a contar (inicio) y en qué número terminamos la cuenta (final).

Por ejemplo, si escribiéramos:

For i = 1 to 50

‘Acciones a realizar

Next

El sistema entra en un bucle donde va a contar desde 1 hasta 50 (en este caso de uno en uno) y en cada uno de esos 50 pasos va a ejecutar las “acciones a realizar”.

Por otro lado, si quisiéramos contar de dos en dos simplemente escribiríamos:

For i = 1 to 50 step 2

‘Acciones a realizar

Next

Si ahora quisiéramos contar hacia atrás de tres en tres, escribiríamos:

For i = 50 to 1 step -3

‘Acciones a realizar

Next

Vamos a ver todo esto con ejemplos prácticos. Crea un libro nuevo, abre el editor VBA e inserta 5 módulos. Copia las siguientes macros en cada uno de ellos.

Macro 1

Sub Leccion16_1()

'Macro que rellena el rango C1-C20 con el número de fila que le corresponde

'Cuenta desde i=1 hasta i=20

For i = 1 To 20     

'Asigna el valor del número de iteración a la celda (i,"C")                                                         

Cells(i, "C").Value = i      

'Aumenta una unidad el valor de i                                         

Next                                                                                 

End Sub

Macro 2

Sub Leccion16_2()

'Macro que rellena el rango C1-C20 con el número de fila que le corresponde solo en las filas impares

'Borramos el contenido de las celdas del rango C1-C20

Range("C1:C20").ClearContents  

'Cuenta desde i=1 hasta i=20                    

For i = 1 To 20 Step 2       

'Asigna el valor del número de iteración a la celda (i,"C")                                          

Cells(i, "C").Value = i        

'Aumenta una unidad el valor de i                                         

Next                                                                                 

End Sub

Macro 3

Sub Leccion16_3()

'Macro que busca la palabra Ana en la columna G desde la fila 11 hacia atrás

'Cuenta desde i = 11 hasta i = 1 (hacia atrás)

For i = 11 To 1 Step -1   

'Si el contenido de la celda es ANA entonces                                                 

If Cells(i, "G").Value = "Ana" Then 

'Abrimos un cuadro de diálogo indicando en qué fila se encuentra                                      

MsgBox "Encontrado Ana en fila: " & i                               

End If

'Disminuimos una unidad el valor de i

Next                                                                               

End Sub

Macro 4

Sub Leccion16_4()

'Macro que cuenta el número de palabras Ana en el rango C1-C20

'Inicializamos la variable a 0

numero = 0       

'Cuenta desde i = 11 hasta i = 1 (hacia atrás)                                    

For i = 1 To 20          

'Si el contenido de la celda es ANA entonces                                                 

If Cells(i, "G").Value = "Ana" Then 

'Abrimos un cuadro de diálogo indicando en qué fila se encuentra                                     

numero = numero + 1                                                             

End If

'Aumentamos una unidad el valor de i

Next                

'Abrimos un cuadro de diálogo indicando el número de palabras Ana                                                             

MsgBox "Número de palabras Ana: " & numero            

End Sub

Macro 5

Sub Leccion16_5()

'Macro que restablece la hoja

'Borramos el contenido de las celdas del rango C1-C20

Range("C1:C20").ClearContents                             

End Sub

Rellena ahora la hoja de cálculo como aparece en la figura. Tendrás que crear también 5 botones y asignarles las macros anteriores.

total-operaciones-matematicas-macros

La primera de las macros rellena las celdas del 1 al 20 de la columna C con el número de fila correspondiente.

En la primera iteración i = 1, luego:

Cells(i, "C").Value = i        

En este caso es:

Cells(1, "C").Value = 1

Asignamos el valor 1 a la celda C1.

En la segunda iteración i = 2, luego:

Cells(2, "C").Value = 2

Asignamos el valor 2 a la celda C2.

Y así sucesivamente hasta el valor 20. Fácil ¿no?

total-operaciones-matematicas-macros

La segunda de las macros hace lo mismo, pero solo rellena las filas impares. Veamos cómo funciona.

For i = 1 To 20 Step 2

Con esta instrucción empezamos en 1 y terminamos en 20 como antes, pero dando saltitos de 2 en 2.

En la primera iteración i = 1, luego:

Cells(i, "C").Value = i        

En este caso es:

Cells(1, "C").Value = 1

Asignamos el valor 1 a la celda C1.

En la segunda iteración i = 3 (recuerda que vamos sumando de dos en dos), luego:

Cells(3, "C").Value = 3

Asignamos el valor 3 a la celda C3.

Y así sucesivamente hasta el valor 19. El siguiente valor sería el 21 que sale fuera del límite (20) y ahí terminaría el bucle.

total-operaciones-matematicas-macros

Con la tercera macro, vamos a buscar la palabra “Ana” en la columna G desde la fila 11 hacía atrás.

Empezamos la iteración con i = 11, y comprobamos si la celda G11 contiene la palabra “Ana”. Como no es el caso, no hacemos nada y restamos una unidad a i.

En la segunda iteración i = 10, y en la celda G10 tampoco encontramos la palabra Ana, luego no hacemos nada y restamos una unidad a i.

Por fin, en la tercera iteración (i = 9), encontramos la palabra Ana en la celda G9, y mostramos un cuadro de diálogo con la fila donde hemos encontrado el resultado.

total-operaciones-matematicas-macros

En el ejemplo, esto sucede además para las filas 6, 4 y 1.

La cuarta macro va a hacer un recuento de palabras “Ana” en el rango C1-C20.

Antes de nada, inicializamos la variable número a 0.

En la primera iteración i = 1, luego:

If Cells(i, "G").Value = "Ana" Then               

Sería:

If Cells(1, "G").Value = "Ana" Then                

El valor de G1 es “Ana”, luego se cumple y se realiza la operación:

numero = numero + 1 

luego,

numero = 0 + 1 = 1

Sumamos una unidad a i.

En la segunda iteración i =2, G2 no es “Ana”, luego no se cumple.

Sumamos una unidad a i.

En la tercera iteración (i = 3) tampoco coincide el valor de la celda G3 con la palabra “Ana”.

En la cuarta iteración (i = 4), G4 es igual a “Ana”, luego realizamos la operación:

numero = numero + 1

quedando,

numero = 1 + 1 = 2

Sumamos una unidad a i.

En la quinta iteración (i = 5) tampoco coincide el valor de la celda G5 con la palabra “Ana”.

En la sexta iteración (i = 6), G6 es igual a “Ana”, luego realizamos la operación:

numero = numero + 1

quedando,

numero = 2 + 1 = 3

Sumamos una unidad a i.

Hasta la novena iteración (i = 9) no vuelve a coincidir el valor de la columna G con “Ana”.

Realizaríamos la operación:

numero = numero + 1

quedando,

numero = 3 + 1 = 4

Sumamos una unidad a i.

Ya no existen más coincidencias, luego el total del número de palabras “Ana” que hay en el rango es 4.

total-operaciones-matematicas-macros

La quinta macro solo sirve para restablecer la hoja por si se quiere volver a repetir la operación con el resto de macros.

Una vez conocemos las funciones IF y FOR vamos a ir subiendo el nivel de programación paulatinamente y elaborando códigos de programación cada vez más complejos, aunque aún nos quedan algunos conceptos y funciones que aprender.

Con esto llegamos al final de la decimosexta lección. Espero que te esté gustando el curso y que me plantees cualquier duda que te surja. También puedes proponerme macros que te interese desarrollar y las voy incluyendo en el temario, soy todo oídos. Nos vemos en el próximo capítulo.

Descarga el archivo del ejemplo

« L15. Buscar un valor en un rango de celdas (Find).

L17. Comando AdvanceFilter Unique. »

0 comentarios

Enviar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Quizá te interese,

Contacto