lunes, 15 de septiembre de 2014

Bucles del tipo FOR...NEXT

Archivo de Excel utilizado: excelavanzado_fornext.xlsm

La estructura repetitiva FOR...NEXT nos permite realizar las instrucciones interiores a ella tantas veces como se indique. Es ideal cuando se sabe el número de ciclos que hemos de realizar. Se utiliza una variable auxiliar que podemos denominar con el nombre que queramos, mientras no sea una palabra reservada, y que inicialmente llamaremos i por costumbre.

El siguiente es un ejemplo de bucle For Next que se repite 10 veces.

For i=1 to 10
   MsgBox i
Next i

En esta macro de ejemplo las líneas de código interiores al For Next se repetirán 10 veces. Para el primer ciclo la variable i tomará el valor 1, para el segundo ciclo tomará el valor 2, y así sucesivamente hasta llegar al último ciclo donde i toma el valor 10.

La línea de código que hemos puesto en este ejemplo es un MsgBox cuya acción es lanzar una ventana emergente que irá mostrándonos los números del 1 al 10 a medida que la variable i va tomando esos valores. Por tanto, tendremos que pulsar 10 veces sobre el botón Aceptar para ir pasando a las siguientes ventanas.

Primer Vídeo

Option Explicit
Sub Lista()
Dim i As Byte
For i = 1 To 10
    Cells(i, 1) = i
Next
End Sub



Segundo Vídeo

  • RND() para generar números aleatorios
  • INT poma la parte entera
  • Inicializar variables
  • Contador
  • Acumulador

Sub Lista2()
Dim i As Long
For i = 1 To 10000
    Cells(i, 2) = i
Next
End Sub
Sub Lista3()
Dim i As Long
For i = 1 To 10
    Cells(i + 4, 3) = i
Next
End Sub
Sub Lista4()
Dim i As Long, fila As Long
fila = 5 'Inicializamos la variable
For i = 1 To 10
    Cells(fila, "D") = i
    fila = fila + 1 'Contador
Next
End Sub
Sub Lista5()
Dim i As Byte, s As Integer, ale As Byte
s = 0 'Inicializamos la variable
For i = 1 To 10
    'generamos un nº aleatorio entre 1 y 100
    ale = Int(Rnd() * 100) + 1
    Cells(i + 4, "E") = ale
    s = s + ale 'Aculador
    Cells(i + 4, "F") = s
Next i
End Sub

Tercer Vídeo

  • Fecha y hora del sistema con NOW
  • NumberFormat para formatear una los valores de una celda
  • Application.ScreenUpdating = False
  • Application.ScreenUpdating = True

Sub Cronometro()
Dim i As Long
Worksheets("Hoja2").Activate
Range("C4") = Now
Application.ScreenUpdating = False
For i = 1 To 10000
    Cells(i, 2) = Int(Rnd() * 50000) + 1
Next i
Application.ScreenUpdating = True
Range("C5") = Now
Range("C6") = Range("C5") - Range("C4")
Range("C6").NumberFormat = "[hh]:mm:ss"
End Sub


Cuarto Vídeo

  • Bucles For...Next anidados
  • Llamar a una macro con CALL

Sub Multiplica()
Dim i As Byte, j As Byte
Worksheets("Hoja3").Activate
'Call Borra
Borra
For i = 1 To 10
    For j = 1 To 10
        Cells(i + 1, j + 1) = i * j
    Next j
Next i
End Sub
Sub Borra()
Range("B2:K11").ClearContents
End Sub


Quinto Vídeo

  • Ejecución de bucles For...Next con un paso distinto de 1 usando STEP
  • Paso negativo
  • Reducción de variables para aligerar el código




Sexto Vídeo

  • Acumular con macro. Tres métodos.
  • Uso de Offset (desplazamiento) para trabajar usando varias celdas de dos formas:
    • sin desplazar el cursor
    • desplazando el cursor

1 comentario: