Cómo utilizar los próximos fines de bucles en excel 2016 vba

El tipo más sencillo de bucle en la programación de Excel VBA es un bucle For-Next. El bucle está controlado por una variable de contador, que comienza en un valor y se detiene en otro valor. Las declaraciones entre la declaración a favor y en la declaración siguiente son las declaraciones que se repiten en el bucle.

A For-Next ejemplo

El ejemplo siguiente utiliza un bucle For-Next para sumar los primeros 1.000 números positivos. La variable total comienza como cero. A continuación, el bucle se produce. La variable Cnt es el contador de bucle. Empieza como 1 y se incrementa en 1 cada vez que a través del bucle. El bucle termina cuando Cnt es 1.000.

Este ejemplo tiene sólo una instrucción dentro del bucle. Esta sentencia añade el valor de Cnt a la variable total. Cuando el bucle termina, un MsgBox muestra la suma de los números.

AddNumbers Sub () Dim totales como DoubleDim Cnt Como LongTotal = 0º Cnt = 1 Para 1000Total = Total + CntNext CntMsgBox TotalEnd Sub

Debido a que el contador de bucle es una variable normal, puede escribir código para cambiar su valor dentro del bloque de código entre la A y de las declaraciones siguientes. Esto, sin embargo, es una muy mal práctica.

FOR-NEXT ejemplos con un Paso

Se puede utilizar un valor Paso saltarse algunos valores de contador en un bucle For-Next. Aquí está el ejemplo anterior, reescrito para sumar sólo los números impares entre 1 y 1000:

AddOddNumbers Sub () Dim totales como DoubleDim Cnt Como LongTotal = 0º Cnt = 1 a 1000 Paso 2Los totales = Total + CntNext CntMsgBox TotalEnd Sub

Esta vez, Cnt comienza como 1 y luego toma valores de 3, 5, 7, y así sucesivamente. El valor del paso determina cómo se incrementa el contador. Observe que el valor bucle superior (1000) no se utiliza en realidad debido a que el valor más alto de Cnt será 999.

Aquí hay otro ejemplo que utiliza un valor Paso de 3. Este procedimiento funciona con la hoja activa y se aplica el sombreado gris claro a cada tercera fila, desde la fila 1 a la fila 100.

Sub ShadeEveryThirdRow () Dim i Como Longfor i = 1 a 100 Paso 3Rows (i) .Interior.Color = RGB (200, 200, 200) Siguiente IEND Sub

Mira el resultado de ejecutar esta macro.

Video: Macros 10. Bucles (For ... Next) y (While ... Wend). Excel 2013

Con un asa para aplicar el sombreado de fondo a filas.
Con un asa para aplicar el sombreado de fondo a filas.

Una For-Next ejemplo, con una salida para la declaración

Un bucle For-Next también puede incluir uno o más Salir Para las declaraciones dentro del bucle. Cuando VBA se encuentra con esta declaración, el bucle termina inmediatamente.

El siguiente ejemplo demuestra la instrucción Exit For. Esta rutina es un procedimiento de funciones, destinado a ser utilizado en una fórmula de hoja de cálculo. La función acepta un argumento (una variable denominada STR) y devuelve los caracteres a la izquierda del primer dígito numérico. Por ejemplo, si el argumento es “KBR98Z”, la función devuelve “KBR.”

Función TextPart (Str) Dim i Como LongTextPart = ““Para i = 1 Para Len (Str) Si IsNumeric (Mid (Str, i, 1)) ThenExit ForElseTextPart = TextPart & Mid (Str, i, 1) End Function IfNext IEND

El bucle For-Next comienza con 1 y termina con el número que representa el número de caracteres de la cadena. El código utiliza función Mid de VBA para extraer un solo carácter dentro del bucle. Si se encuentra un carácter numérico, se ejecuta la instrucción Exit For, y el bucle termina prematuramente.

Si el personaje no es numérico, que se añade al valor de retorno (que es el mismo que el nombre de la función). La única vez que el bucle examinará cada personaje es si la cadena que se pasa como argumento no contiene caracteres numéricos.

A anidado For-Next ejemplo

Puede tener cualquier número de declaraciones en el bucle y el nido For-Next bucles dentro de otros bucles FOR-NEXT.

El ejemplo siguiente utiliza un bucle anidado Siguiente Para-para insertar números aleatorios en un rango de 12-fila por 5-columna de celdas. Observe que la rutina ejecuta la bucle interior (El bucle con el contador de fila) una vez para cada iteración de la lazo externo (El bucle con el contador de Col). En otras palabras, la rutina realiza las células (fila, columna) = instrucción Rnd 60 veces.

Estas células se llenaron mediante el uso de un bucle anidado For-Next.

Video: 4.4.12 Ejemplo Estructura Do While Loop: Curso de Macros y Visual Basic para Excel

Estas células se llenaron mediante el uso de un bucle anidado For-Next.
Sub FillRange () Dim Col Como LongDim fila como Longfor Col = 1 Para 5Porque Fila = 1 Para 12Cells (fila, columna) = RndNext RowNext ColEnd Sub

El siguiente ejemplo se utiliza anidados bucles FOR-NEXT para inicializar una matriz tridimensional con el valor 100. Esta rutina ejecuta la instrucción en el medio de todos los bucles (la instrucción de asignación) 1.000 veces (10 * 10 * 10), cada vez con una combinación diferente de los valores de i, j, y k:

NestedLoops Sub () Dim MiArray (10, 10, 10) dim i Como LongDim j Como LongDim k Como Longfor i = 1 a 10 Porque j = 1 a 10 Porque k = 1 Para 10MyArray (i, j, k) = 100Next KNEXT JNEXT i `Otras declaraciones van hereEnd Sub

He aquí un ejemplo final que utiliza anidado bucles FOR-NEXT, con un valor de Paso. Este procedimiento crea un tablero de ajedrez, cambiando el color de fondo de las células que se alternan.

El uso de bucles para crear un patrón de tablero de ajedrez.
El uso de bucles para crear un patrón de tablero de ajedrez.

El contador de filas bucles de 1 a 8. Un Si-Entonces construir determina que anidados For-Next estructura a utilizar. Para las filas impares, el contador de Col comienza con 2. Para las filas pares, el contador de Col comienza con 1. Ambos bucles utilizar un valor Paso de 2, por lo que se ven afectadas las células alternas. Dos declaraciones adicionales hacen que las células cuadrada (al igual que un tablero de ajedrez real).

Sub MakeCheckerboard () Dim R As Long, C Como Longfor R = 1 Para 8Si WorksheetFunction.IsOdd (R) ThenFor C = 2 a 8 Paso 2Cells (R, C) .Interior.Color = 255Next CElseFor C = 1 a 8 2Cells Paso (R, C) .Interior.Color = 255Next CEND IfNext RRows ( “1: 8”) RowHeight = 35Columns.. ( “A: H”) ColumnWidth = 6.5End Sub
Artículos Relacionados