En este artículo, hemos cubierto diferentes tipos de bucles utilizados en VBA y cómo usarlos para realizar la misma tarea de diferentes maneras.

¿Por qué bucles?

El bucle es una de las técnicas de programación más poderosas que se utilizan en muchos lenguajes de programación. El bucle se usa para repetir un bloque de código el número de veces requerido o hasta que una condición dada se evalúa como verdadera o se alcanza un valor específico, después de lo cual se ejecuta el siguiente bloque de código.

El propósito de un bucle de Excel VBA es hacer que Excel repita un fragmento de código un cierto número de veces. Se puede especificar cuántas veces se debe repetir un código como un número fijo (por ejemplo, haga esto 10 veces) o como una variable (por ejemplo, haga esto tantas veces como filas de datos).

Los bucles de Excel se pueden construir de diferentes formas para adaptarse a diferentes circunstancias. A menudo, se pueden obtener los mismos resultados de diferentes formas para adaptarse a sus preferencias personales.

Hay tres tipos diferentes de bucles disponibles en Excel VBA, que son:

  1. HACER HASTA Bucle 2. HACER MIENTRAS Bucle 3. Bucle FOR {vacío} 1. Bucle DO HASTA El bucle DO HASTA se utiliza para repetir un bloque de código indefinidamente, hasta que la condición especificada se establezca en Verdadero. La condición puede comprobarse al principio o al final del bucle. La instrucción DO UNTIL… LOOP prueba la condición al principio, mientras que la instrucción DO… LOOP UNTIL prueba la condición al final del Loop.

Sintaxis de DO UNTIL… LOOP instrucción

Hacer hasta [condición]

{vacío} [Bloque de código que se repetirá]

Bucle

Sintaxis de la sentencia DO… LOOP UNTIL

Haz {vacío} [Bloque de código que se repetirá]

Bucle hasta [condición]

Hemos explicado el bucle DO… UNTIL con un ejemplo. Las macros Loop1 y Loop2 se utilizan para calcular el promedio de números en la columna A y la columna B utilizando el ciclo DO… UNTIL.

Los datos de muestra están presentes en el rango A15: B27. La columna A contiene las puntuaciones de la Ronda 1 y la columna B contiene las puntuaciones de la Ronda 2. Queremos calcular los promedios de las puntuaciones de la Ronda 1 y la Ronda 2 en la columna C.

Sample1

En la macro Loop1, hemos utilizado «FormulaR1C1» para insertar la fórmula promedio en la celda activa. La declaración de condición en el ciclo DO UNTIL se comprueba al final del ciclo.

En la macro Loop2, hemos utilizado «WorksheetFunction.Average» para insertar el valor promedio en la celda activa. Incluso en esta macro, la declaración de condición se comprueba al final del ciclo.

La única diferencia entre la macro Loop1 y Loop2 es que Loop1 inserta la fórmula de promedio, mientras que Loop2 calcula el promedio y luego inserta el valor promedio en la celda activa.

OutputSample1

{vacío} 2. Bucle DO WHILE El bucle DO WHILE se utiliza para repetir un bloque de código un número indefinido de veces, mientras que la condición especificada sigue siendo Verdadera y se detiene cuando la condición devuelve False. La condición puede comprobarse al principio o al final del bucle. La instrucción DO WHILE… LOOP prueba la condición al principio, mientras que la instrucción DO… LOOP WHILE prueba la condición al final del ciclo. La sentencia DO… LOOP WHILE se usa cuando queremos que el bucle ejecute el bloque de código al menos una vez antes de verificar la condición.

Sintaxis de DO WHILE… LOOP instrucción

Hacer mientras [condición]

{vacío} [Bloque de código que se repetirá]

Bucle

Sintaxis de la sentencia DO… LOOP WHILE

Haz {vacío} [Bloque de código que se repetirá]

Bucle mientras [condición]

En este ejemplo, las macros Loop3 y Loop4 se utilizan para calcular los promedios de los valores en las celdas de la columna A y la columna B. Ambas macros funcionan con los mismos datos de muestra que utilizan las macros Loop1 y Loop2. Ambos usan la instrucción DO WHILE para recorrer el rango que contiene los datos.

La única diferencia entre las macros Loop3 y Loop4 es que son formas diferentes de representar las condiciones del bucle DO WHILE.

Como las macros Loop3 y Loop4 usan los mismos datos de entrada e incluso realizan las mismas funciones que la macro Loop1, por lo que la salida devuelta también será la misma que la de la macro Loop1.

{vacío} 3. Bucle FOR El bucle For se utiliza para repetir un bloque de código un número específico de veces.

Sintaxis del bucle FOR

Para count_variable = start_value To end_value {vacío} [bloque de código]

La siguiente macro count_variable Loop5 muestra cómo usar el bucle FOR para calcular el promedio. También utiliza los mismos datos de muestra que utilizan otras macros. Hemos utilizado 15 como valor inicial ya que los datos de muestra comienzan en la fila 15 ^ th ^. Hemos utilizado Range («A» & Cells.Rows.Count) .End (xlUp) .Row para encontrar la última fila que contiene datos. El bucle FOR se repetirá (última celda-15) varias veces.

La salida devuelta después de ejecutar la macro Loop5 es la misma que la de la macro Loop1.

La macro Loop6 se crea para calcular el promedio, solo si la celda activa que tendrá la función promedio está vacía antes de ejecutar la macro.

Los datos de muestra para esta macro están presentes en el rango de E15 a G27.

Sample2

Hemos utilizado DO… LOOP WHILE para recorrer el rango definido. La instrucción IF se usa para verificar si la celda donde se insertará la función contiene un valor. Esta macro insertará la función promedio en la celda solo si está vacía.

OutputSample2

La macro Loop7 también se usa para calcular el promedio. Comprueba los valores en la columna auxiliar antes de evaluar si volver a realizar un bucle. También comprueba si la referencia de celda que se utilizará en la función de promedio está vacía.

Los datos de muestra utilizados para la macro Loop7 están en el rango J15: M27.

Sample3

La columna M se utiliza como columna auxiliar. Esta macro insertará una función promedio solo si una celda en la columna M no está vacía. Esta macro comprueba que una celda debe estar vacía antes de insertar una función promedio en ella. No insertará una función de promedio si la celda referenciada en la función de promedio está vacía.

OutputSample3

Siga el código a continuación

Option Explicit

Sub Loop1()

'Calculating average

'Do Until loop will loop until cell in the previous column of active cell is empty

Range("C15").Select

Do

'Assigning average function on value in cells of previous two consecutive columns

ActiveCell.FormulaR1C1 = "=Average(RC[-1],RC[-2])"

'Moving to cell in next row

ActiveCell.Offset(1, 0).Select

'Checking whether value in cell of previous column is empty

'Do Until loop will loop until condition statement returns True

Loop Until IsEmpty(ActiveCell.Offset(0, -1))

Range("A15").Select

End Sub

Sub Loop2()

'Calculating average

'Do Until loop will loop until cell in the previous column of active cell is empty

'This macro is similar to macro Loop1, only way of calculating average is different

Range("C15").Select

Do

'Worsheet.Average function is used for calculating the average

ActiveCell.Value = WorksheetFunction.Average(ActiveCell.Offset(0, -1).Value, _

ActiveCell.Offset(0, -2).Value)

ActiveCell.Offset(1, 0).Select

Loop Until IsEmpty(ActiveCell.Offset(0, -1))

Range("A15").Select

End Sub

Sub Loop3()

'Calculating average

'Do While loop will run until cell in the previous column of active cell is empty

Range("C15").Select

'Checking whether value in cell of previous column is empty

'Do While loop will loop until condition statement is True

Do While IsEmpty(ActiveCell.Offset(0, -1)) = False

'Assigning average function on value in cells of previous two consecutive column

ActiveCell.FormulaR1C1 = "=Average(RC[-1],RC[-2])"

'Moving to cell in next row

ActiveCell.Offset(1, 0).Select

Loop

Range("A15").Select

End Sub

Sub Loop4()

'Calculating average

'Do While loop will run until cell in the previous column of active cell is empty

'This macro is similar to macro Loop3, only way of applying condition is different

Range("C15").Select

Do While Not IsEmpty(ActiveCell.Offset(0, -1))

ActiveCell.FormulaR1C1 = "=Average(RC[-1],RC[-2])"

ActiveCell.Offset(1, 0).Select

Loop

Range("A15").Select

End Sub

Sub Loop5()

'FOR loop repeats for a fixed number of times determined by the number of rows

Dim i, lastcell As Long

'Finding the last row containing data in column A

lastcell = Range("A" & Cells.Rows.Count).End(xlUp).Row

Range("C15").Select

'i variable is assigned value of 15 as our sample data begin from 15th row

'FOR Loop will loop x

For i = 15 To lastcell

ActiveCell.FormulaR1C1 = "=Average(RC[-1],RC[-2])"

ActiveCell.Offset(1, 0).Select

Next i

Range("A15").Select

End Sub

Sub Loop6()

'Calculating average

'Do Until loop will loop until cell in the previous column of active cell is empty

'It does not calculate an average if there is already something in the cell

Range("G15").Select

Do

If IsEmpty(ActiveCell) Then

ActiveCell.FormulaR1C1 = "=Average(RC[-1],RC[-2])"

End If

ActiveCell.Offset(1, 0).Select

Loop Until IsEmpty(ActiveCell.Offset(0, -1))

Range("E15").Select

End Sub

Sub Loop7()

'Do Until loop runs as long as there is something in cell in next column

'It does not calculate an average if there is already something in the active cell

'Nor if there is no data in cells which are used within average function (to avoid #DIV/0 errors).

'Calculating average

Range("L15").Select

Do

If IsEmpty(ActiveCell) Then

If IsEmpty(ActiveCell.Offset(0, -1)) And IsEmpty(ActiveCell.Offset(0, -2)) Then

ActiveCell.Value = ""

Else

ActiveCell.FormulaR1C1 = "=Average(RC[-1],RC[-2])"

End If

End If

ActiveCell.Offset(1, 0).Select

Loop Until IsEmpty(ActiveCell.Offset(0, 1))

Range("J15").Select

End Sub

Si te gustó este blog, compártelo con tus amigos en Facebook y Facebook.

Nos encantaría saber de usted, háganos saber cómo podemos mejorar nuestro trabajo y hacerlo mejor para usted. Escríbanos a [email protected]