Bucle excel for next

Hola,
Tengo una pregunta para los más expertos en Excel y sobre todo aquellos que sepan programar en Visual Basic.
Tengo dos columnas ('A' y 'B'). La columna 'A' contiene precios. La Columna 'B' contiene unos pocos precios y el resto de la columna completado con ceros. Lo que deseo que el Excel haga es detenerse en cada valor distinto de cero en la columna B y que lo comience a comparar con los siguientes valores en la columna A. Deseo que dicha acción la realice hasta encontrar en la columna 'A' un valor inferior al que esta evaluando en la columna B. Luego, quisiera que en una columna 'C' me muestre cual fue el valor máximo encontrado en la columna 'A' hasta detenerse. Por ultimo desearía que dicho proceso se repita a cada valor distinto de cero en la columna 'B'.
Lo primero que se me ocurre es un bucle « For Next » o algo similar, pero realmente no tengo los conocimientos necesarios para poder efectuarlo. Para ponerlo un poco más gráfico vamos a un ejemplo :
Imaginemos que el primer precio distinto a cero esta en B7, yo deseo entonces que el Excel compare B7 con A8, A9, A10, A11.. Hasta encontrar un valor en columna A menor a B7. Supongamos que ello sucede en A20. Luego en C7 que me coloque el máximo de los valores A8, A9, A10, A11.. Hasta A20 donde se corto el bucle. Ahora sigamos y digamos que el próximo valor distinto a cero viene en B18, pues ahí lo mismo, comprar B18, con A19, A20, A21. Hasta encontrar en columna A un valor inferior a B18. Suponiendo que este valor esté en A30, deseo entonces que en C18 me coloque el máximo de los valores entre A19 y A30. Así sucesivamente con los 65000 datos de la columna.
Es por ello que estoy pensando en un bucle o cualquier otra solución que la imagino a través de Visual Basic más que con una hoja de Excel convencional..
Muchas gracias de antemano por el interés en mi inquietud, y no dudéis en solicitar más información para resolver mi duda.
Un cordial saludo y gracias nuevamente,
Pablo

2 respuestas

Respuesta
1
He creado un botón "Buscar" y una macro con este código
Sub Buscar()
    Dim nFilaB As Long
    Dim nFilaA As Long
    Dim sValorB As String
    Dim sValorA As String
    Dim nMaxValorA As Double
    nFilaB = 1
    sValorB = ActiveSheet.Cells(nFilaB, 2)
    Do While ActiveSheet.Cells(nFilaB, 1) <> ""
        If sValorB <> "" And sValorB <> "0" Then
            nMaxValorA = 0
            nFilaA = nFilaB
            sValorA = ActiveSheet.Cells(nFilaA, 1)
            Do Until CDbl(sValorA) < CDbl(sValorB)
                If CDbl(sValorA) > nMaxValorA Then
                    nMaxValorA = sValorA
                End If
                nFilaA = nFilaA + 1
                sValorA = ActiveSheet.Cells(nFilaA, 1)
                If sValorA = "" Then Exit Do
            Loop
            If sValorA = "" Then Exit Do
            If nMaxValorA <> 0 Then
                ActiveSheet.Cells(nFilaB, 3) = nMaxValorA
            End If
        End If
        nFilaB = nFilaB + 1
        sValorB = ActiveSheet.Cells(nFilaB, 2)
    Loop
End Sub
Te he dejado aquí el ejemplo para que te lo descargues:
http://goo.gl/jsaXQ
Perdón plimeno, te cambié el nombre :$
Saludos,
[email protected]
Respuesta
1
Esta macro te debería servir, yo la probé y funciona
Sub Busca()
For i = 1 To 65000
a = a + 1
If Range("B" & a).Value <> 0 Then
b = a
Do    '
    Do While Contador < 65000
        Contador = Contador + 1
        b = b + 1
        If Range("A" & b).Value < Range("B" & a).Value Then
        Comprobar = False
            Exit Do
        End If
    Loop
Loop Until Comprobar = False
a = a + 1
c = "=Max(A" & a & ":A" & b & ")"
Range("C" & a).Value = c
End If
Next i
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas