Get Even More Visitors To Your Blog, Upgrade To A Business Listing >>

VBA: Un bucle FOR EACH inverso.

Todos conocemos el parámetro Step dentro de un bucle FOR...NEXT, con el que podemos controlar el sentido del recorrido al definirlo con un -1:
For x=10 to 1 Step -1
'nuestro código
Next c


Pero, ¿qué ocurre si nuestro bucle es un FOR EACH...NEXT???
Tenemos un problema ya que este bucle no admite el parámetro de salto o sentido Step... obligándonos el proceso a recorrer nuestro rango siempre en el mismo sentido de izquierda a derecha y de arriba abajo...
Nuestra meta: Recorrer el rango de derecha a izquierda y de abajo hacia arriba.


Para solucionar nuestro problema convertiremos nuestro bucle FOR EACH ...NEXT en un bucle FOR...NEXT, y para conseguir el recorrido inverso deseado usaremos la propiedad .Item del objeto Range.
Esta propiedad nos permite reconocer cada celda de un rango definido con un número índice único.


Veamos el efecto en los siguientes procedimientos:

Sub ForEach_INVERSO()
Dim lng As Long, x As Long
Dim rng As Range

'definimos el rango de estudio
Set rng = Range("A1:C5")
x = 0
For lng = rng.Cells.Count To 1 Step -1
'rng(lng) es una forma abreviada para representar rng.Item(lng)
'si el valor de la celda es par...
If rng(lng).Value Mod 2 = 0 Then
rng(lng).Interior.Color = vbRed
'trasladamos la dirección a la columna E
Cells(1 + x, "E").Value = rng(lng).Address
x = x + 1
End If
Next lng
End Sub
''''''''''''''''''''''''''''''''
''''''''''''''''''''''''''''''''
''''''''''''''''''''''''''''''''
Sub ForEach_DIRECTO()
Dim lng As Long, x As Long
Dim rng As Range

'definimos el rango de estudio
Set rng = Range("A1:C5")
x = 0
For Each celda In rng
'rng(lng) es una forma abreviada para rng.item(lng)
'si el valor de la celda es par...
If celda.Value Mod 2 = 0 Then
celda.Interior.Color = vbRed
'trasladamos la dirección a la columna F
Cells(1 + x, "F").Value = celda.Address
x = x + 1
End If
Next celda
End Sub


Si ejecutamos ambos procedimientos, el DIRECTO y el INVERSO, veremos...



Comprobamos en las columnas E y F el sendero tomado por uno y otro procedimiento...


This post first appeared on EXCEL FORO: EJERCICIOS, EJEMPLOS, SOLUCIONES, DUDA, please read the originial post: here

Share the post

VBA: Un bucle FOR EACH inverso.

×

Subscribe to Excel Foro: Ejercicios, Ejemplos, Soluciones, Duda

Get updates delivered right to your inbox!

Thank you for your subscription

×