VBA para bucle, uso de bucles en VBA en Microsoft Excel

Anonim

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

1. HACER HASTA bucle

El bucle DO UNTIL se utiliza para repetir un bloque de código indefinidamente, hasta que la condición especificada se establece en True. 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 la sentencia DO UNTIL… LOOP

Hacer hasta [condición]

[Bloque de código a repetir]

Círculo

Sintaxis de la sentencia DO… LOOP UNTIL

Hacer

[Bloque de código a repetir]

Bucle hasta [condición]

Hemos explicado el ciclo 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.

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 promedio, mientras que Loop2 calcula el promedio y luego inserta el valor promedio en la celda activa.

2. HACER MIENTRAS bucle

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 instrucción 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 la sentencia DO WHILE… LOOP

Hacer mientras [condición]

[Bloque de código a repetir]

Círculo

Sintaxis de la sentencia DO… LOOP WHILE

Hacer

[Bloque de código a repetir]

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

3. bucle FOR

For Loop 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

[bloque de código]

Siguiente count_variable

La macro Loop5 muestra cómo utilizar el bucle FOR para calcular el promedio. También utiliza los mismos datos de muestra utilizados por otras macros. Hemos utilizado 15 como valor inicial ya que los datos de muestra comienzan desde el 15th hilera. 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 de 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.

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.

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.

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 a la que se hace referencia en la función de promedio está vacía.

Siga a continuación para obtener el código

 Opción Explícita Sub Loop1 () 'Calculando promedio' El bucle Do hasta se repetirá hasta que la celda de la columna anterior de la celda activa esté vacía Rango ("C15"). Seleccione Do 'Asignación de función promedio en el valor en celdas de las dos columnas anteriores ActiveCell consecutivas. FormulaR1C1 = "= Promedio (RC [-1], RC [-2])" 'Mover a la celda en la siguiente fila ActiveCell.Offset (1, 0) .Seleccione' Verificando si el valor en la celda de la columna anterior está vacío 'Hacer hasta El bucle se repetirá hasta que la declaración de condición devuelva True Loop until IsEmpty (ActiveCell.Offset (0, -1)) Range ("A15"). Seleccione End Sub Sub Loop2 () 'Calculating average' Do La columna de la celda activa está vacía 'Esta macro es similar a la macro Loop1, la única forma de calcular el promedio es diferente Rango ("C15"). Seleccione Hacer' Hoja de cálculo. La función Promedio se usa para calcular el promedio ActiveCell.Value = WorksheetFunction.Average ( ActiveCell.Offset (0, -1) .Value, _ ActiveCell.Offset (0, -2) .Value) ActiveCell.Offset (1, 0) .Seleccione Bucle hasta que esté vacío (ActiveCel l.Desplazamiento (0, -1)) Rango ("A15"). Seleccione End Sub Sub Loop3 () 'Calculando promedio' El bucle Do While se ejecutará hasta que la celda de la columna anterior de la celda activa esté vacía Rango ("C15") .Seleccione 'Verificando si el valor en la celda de la columna anterior está vacío' El bucle Do While se repetirá hasta que la declaración de condición sea Verdadero Do While IsEmpty (ActiveCell.Offset (0, -1)) = False 'Asignando función promedio al valor en las celdas de la anterior dos columnas consecutivas ActiveCell.FormulaR1C1 = "= Promedio (RC [-1], RC [-2])" 'Moviéndose a la celda en la siguiente fila ActiveCell.Offset (1, 0) .Seleccione Loop Range ("A15"). Seleccione End Sub Sub Loop4 () 'Calculando promedio' El bucle Do While se ejecutará hasta que la celda de la columna anterior de la celda activa esté vacía 'Esta macro es similar a la macro Loop3, la única forma de aplicar la condición es diferente Range ("C15"). Seleccionar Hacer mientras no esté vacío (ActiveCell.Offset (0, -1)) ActiveCell.FormulaR1C1 = "= Promedio (RC [-1], RC [-2])" ActiveCell.Offset (1, 0) .Seleccione Loop Range (" A15 "). Seleccione End Sub Sub Loop5 () 'FOR loop se repite para un entumecimiento fijo er de tiempos determinados por el número de filas Dim i, lastcell As Long 'Encontrar la última fila que contiene datos en la columna A lastcell = Range ("A" & Cells.Rows.Count) .End (xlUp) .Row Range ("C15 ") .Seleccione 'i variable tiene un valor asignado de 15 ya que nuestros datos de muestra comienzan en la fila 15' FOR Loop se repetirá x For i = 15 To lastcell ActiveCell.FormulaR1C1 =" = Promedio (RC [-1], RC [-2 ]) "ActiveCell.Offset (1, 0) .Seleccione Next i Range (" A15 "). Seleccione End Sub Sub Loop6 () 'Calculando el promedio' El bucle Do until se repetirá hasta que la celda de la columna anterior de la celda activa esté vacía ' No calcula un promedio si ya hay algo en la celda Range ("G15"). Seleccione Do If IsEmpty (ActiveCell) Then ActiveCell.FormulaR1C1 = "= Average (RC [-1], RC [-2])" End If ActiveCell.Offset (1, 0) .Seleccione Bucle hasta que esté vacío (ActiveCell.Offset (0, -1)) Rango ("E15"). Seleccione End Sub Sub Loop7 () 'Hacer hasta que el bucle se ejecute mientras haya algo en la celda de la siguiente columna 'No calcula un promedio si ya hay algo en la c activa ell 'Tampoco si no hay datos en las celdas que se utilizan dentro de la función promedio (para evitar errores # DIV / 0). 'Calculando el rango promedio ("L15"). Seleccione Do If IsEmpty (ActiveCell) Then If IsEmpty (ActiveCell.Offset (0, -1)) And IsEmpty (ActiveCell.Offset (0, -2)) Luego ActiveCell.Value = " "Else ActiveCell.FormulaR1C1 =" = Promedio (RC [-1], RC [-2]) "End If End If ActiveCell.Offset (1, 0) .Seleccione Bucle hasta que esté vacío (ActiveCell.Offset (0, 1)) Rango ("J15"). Seleccione End Sub 

Si te gustó este blog, compártelo con tus amigos en Facebook. Además, puede seguirnos en Twitter y Facebook.

Nos encantaría saber de usted, háganos saber cómo podemos mejorar nuestro trabajo y hacerlo mejor para usted. Escríbanos al sitio de correo electrónico