Bucles en VBA

Hay situaciones en las que se requiere un programa VBA para realizar el mismo conjunto de acciones varias veces seguidas (es decir, repetir el mismo bloque de código varias veces). Esto se puede hacer usando bucles VBA.

Los bucles de VBA incluyen:

A continuación, veremos más de cerca cada uno de estos ciclos.

Operador For Loop en Visual Basic

La estructura del operador de bucle. El en Visual Basic se puede organizar en una de dos formas: como un bucle Para… Siguiente o como un bucle Para cada.

Ciclo “Para… Siguiente”

Cycle Para… Siguiente utiliza una variable que toma secuencialmente valores de un rango dado. Con cada cambio de valor de la variable, se realizan las acciones encerradas en el cuerpo del ciclo. Esto es fácil de entender a partir de un ejemplo simple:

Para i = 1 a 10 Total = Total + iArray(i) Siguiente i

En este bucle simple Para… Siguiente se utiliza variable i, que toma secuencialmente los valores 1, 2, 3,… 10, y para cada uno de estos valores se ejecuta el código VBA dentro del bucle. Por lo tanto, este ciclo suma los elementos de la matriz. iArray en variable Total.

En el ejemplo anterior, no se especifica el incremento del bucle, por lo que para incrementar la variable i de 1 a 10, el valor predeterminado es un incremento 1… Sin embargo, en algunos casos es necesario utilizar diferentes valores de incremento para el bucle. Esto se puede hacer usando la palabra clave pasocomo se muestra en el siguiente ejemplo sencillo.

Para d = 0 a 10 Paso 0.1 dTotal = dTotal + d Siguiente d

Dado que en el ejemplo anterior, el paso de incremento se establece igual a 0.1, luego la variable dTotal por cada repetición del ciclo toma los valores 0.0, 0.1, 0.2, 0.3,… 9.9, 10.0.

Para determinar el paso del ciclo en VBA, puede usar un valor negativo, por ejemplo, como este:

Para i = 10 A 1 Paso -1 iArray(i) = i Siguiente i

Aquí el incremento es -1, entonces la variable i con cada repetición del ciclo toma los valores 10, 9, 8,… 1.

Bucle "Para cada uno"

Cycle Para cada similar a un ciclo Para… Siguiente, pero en lugar de iterar sobre la secuencia de valores de la variable de contador, el ciclo Para cada realiza un conjunto de acciones para cada objeto en el grupo de objetos especificado. En el siguiente ejemplo, usando un bucle Para cada enumera todas las hojas en el libro de Excel actual:

Dim wSheet como hoja de trabajo para cada wSheet en Worksheets MsgBox "Найден лист: " & wSheet.Name Siguiente wSheet

Instrucción de interrupción de bucle "Exit For"

Operador Salir para utilizado para interrumpir el ciclo. Tan pronto como se encuentra esta declaración en el código, el programa finaliza la ejecución del ciclo y procede a la ejecución de las declaraciones que están en el código inmediatamente después de este ciclo. Esto se puede usar, por ejemplo, para buscar un valor específico en una matriz. Para hacer esto, usando un bucle, se escanea cada elemento de la matriz. Tan pronto como se encuentra el elemento requerido, no hay necesidad de revisar el resto: el ciclo se interrumpe.

Aplicación de operador Salir para demostrado en el siguiente ejemplo. Aquí el bucle itera sobre 100 entradas de matriz y compara cada una con el valor de la variable dval… Si se encuentra una coincidencia, el ciclo finaliza:

For i = 1 a 100 If dValues(i) = dVal Then IndexVal = i Exit For End If Next i

El bucle Do While en Visual Basic

Cycle Hacer mientras ejecuta un bloque de código siempre que se cumpla la condición especificada. El siguiente es un ejemplo de un procedimiento Sub, en el que usando el bucle Hacer mientras Los números de Fibonacci que no exceden 1000 se muestran secuencialmente:

'El procedimiento Sub genera números de Fibonacci que no superan los 1000 Sub Fibonacci() Dim i As Integer 'contador para indicar la posición del elemento en la secuencia Dim iFib As Integer 'almacena el valor actual de la secuencia Dim iFib_Next As Integer 'almacena el siguiente valor de la secuencia Dim iStep As Integer 'almacena el tamaño del siguiente incremento' inicializa las variables i y iFib_Next i = 1 iFib_Next = 0 'Do While el ciclo se ejecutará hasta que el valor del 'número de Fibonacci actual sea mayor que 1000 Do While iFib_Next < 1000 If i = 1 Entonces 'caso especial para el primer elemento iStep = 1 iFib = 0 Else 'guarda el tamaño del siguiente incremento antes de sobrescribir 'el valor actual de la secuencia iStep = iFib iFib = iFib_Next End If 'imprime el número de Fibonacci actual en la columna A de la hoja de cálculo activa 'en la fila con índice i Cells(i , 1).Value = iFib 'calcula el siguiente número de Fibonacci e incrementa el índice de posición del elemento en 1 iFib_Next = iFib + iStep i = i + 1 Loop End Sub

En el ejemplo dado, la condición iFib_Siguiente < 1000 comprobado al principio del bucle. Por lo tanto, si el primer valor iFib_Siguiente Si hubiera más de 1000, el bucle nunca se ejecutaría.

Otra forma de implementar un bucle. Hacer mientras - coloque la condición no al principio, sino al final del bucle. En este caso, el bucle se ejecutará al menos una vez, independientemente de que se cumpla la condición.

Esquemáticamente, tal ciclo Hacer mientras con la condición a verificar al final se verá así:

Hacer... Bucle Mientras iFib_Next < 1000

Цикл «Hacer hasta» en Visual Basic

Cycle Hacer hasta muy similar al ciclo Hacer mientras: el bloque de código en el cuerpo del bucle se ejecuta una y otra vez hasta que se cumple la condición especificada (el resultado de la expresión condicional es ¿Editas con tu equipo de forma remota?). En el siguiente procedimiento Sub usando un ciclo Hacer hasta recuperar valores de todas las celdas de una columna A hoja de cálculo hasta que la columna encuentre una celda vacía:

iRow = 1 Do Until IsEmpty(Cells(iRow, 1)) 'El valor de la celda actual se almacena en el arreglo dCellValues ​​dCellValues(iRow) = Cells(iRow, 1).Value iRow = iRow + 1 Loop

En el ejemplo anterior, la condición EstáVacío(Celdas(iRow, 1)) ubicado al inicio de la estructura Hacer hasta, por lo que el ciclo se ejecutará al menos una vez si la primera celda tomada no está vacía.

Sin embargo, como se muestra en los ejemplos de bucle Hacer mientras, en algunas situaciones es necesario que el bucle se ejecute al menos una vez, independientemente del resultado inicial de la expresión condicional. En este caso, la expresión condicional debe colocarse al final del bucle, así:

Hacer... Bucle hasta que esté vacío (Células (iRow, 1))

Deje un comentario