Repetir con condición

Hola, en esta macro consigo lo que necesito salvo que no quiero que sea indefinida, necesito que cuando el valor de la celda SD55 es siempre cero, se detenga después de 30 iteraciones, y a la vez si el valor cero cambia antes de llegar a las 30 iteraciones finalizar la macro.
Do
Range("RN50:SD260").Calculate
Loop While Range("SD55").Value = 0

2 respuestas

Respuesta
1
Si quieres hacer unas iteraciones de 30 veces, lo mejor es utilizar un For... y para validar utiliza un
For i = 1 To 30
If Range("SD55").Value = 0 Then
....Instrucciones...
Else
End
End If
Next i
Si quieres mandame un archivo de ejemplo de que quieres hacer y te colaboro... [email protected] porque la verdad es que no te entiendo muy bien...
Respuesta
1
Bueno la verdad no entendí muy bien la consulta, pero creo que lo que necesitas se soluciona con la siguiente macro:
For x = 1 To 30
If (Range("SD55").Value <> 0) Then
Exit Sub
Else
Range("RN50:SD260").Calculate
End If
Next x
Espero que esto sea lo que necesita, de lo contrario no finalice la consulta hasta obtener la respuesta adecuada, cualquier inquietud me la puede comunicar en mi perfil, si le ha sido de utilidad mi ayuda NO OLVIDE PUNTUAR Y FINALIZAR LA PREGUNTA, que tenga un feliz día!
Hola, gracias por atenderme, voy a tratar de dar un ejemplo más completo y elaborado, espero que se entienda:
La macro que escribo abajo hay que corregirla para que haga lo siguiente:
En el rango A no hay problema porque es muy probable encontrar un valor >0, pero si la celda B1 es =0 se debe calcular el rango B1:B10 hasta que B1 sea > que cero, cuando se consigue que B1 sea >0 sigue con la instrucción siguiente en la columna C: Si la celda C1=0 se debe calcular el rango C1:C10 hasta que C1 sea > que cero, luego DE, E y F, lo que yo necesito corregir es que si en B1, C1, D1, E1 o F1 nunca llega a ser >0 luego de 10 iteraciones, comience de nuevo desde el principio (rango A). Digamos que la macro termina cuando se consigue que en A1, B1, C1, D1, E1 y F1 es mayor que cero, y en el caso de que nunca pueda completarse la macro con todos los valores mayores de cero, se termina igual luego de que haya comenzado desde el "rango A" 30 veces en total .
Lo explico de otra manera por si es muy rebuscado: Por ejemplo: empieza calculando el rango A y aparece en A1 un valor >0, sigue con el rango B y consigue que B1>0, luego sigue con el rango C pero luego de 10 iteraciones no se cumple la condición C1>0, entonces comienza de nuevo a calcular el rango A, y así se repetirá el proceso, cada vez que vuelva a calcular las otras instrucciones y no consiga en algunas de ellas el ">0" volverá a empezar un máximo de 30 veces y finaliza la macro.
Corregir macro:
Do
Range("A1:A10 ").Calculate               ( volver aqui hasta 30 veces en total)
Loop While Range("A1").Value = 0    
Do
Range("B1:B10 ").Calculate
Loop While Range("B1").Value = 0     (10 veces)
Do
Range("C1:C10 ").Calculate
Loop While Range("C1").Value = 0     (10 veces)
Do
Range("D1:D10").Calculate
Loop While Range("D1").Value = 0     (10 veces)
Do
Range("E1:E10 ").Calculate
Loop While Range("E1").Value = 0     (10 veces)
Do
Range("F1:F10").Calculate
Loop While Range("F1").Value = 0      (10 veces)
Bueno ya tengo solucionada sumacro, pero no funciona perfectamente debido a que con esta instrucción Range("A1:A10 "). ¿Calculate qué pretende hacer?, por que dicha instrucción lo único que hace es poner en blanco la celda, pero la macro ya esta probada en los diferentes casos que solicita, espero que me aclare prontamente para agregarlo a la macro, estoy atento a su respuesta.
Hola, para poder probar la macro se podría hacer poniendo estas fórmulas: en la celda A1: MIN(A2:A10), en la B1: MIN(B2:B10) y así hasta la F1.
En cada celda de este rango A2:A10 : ALEATORIO. ENTRE(1;15).
Y en cada celda de estos rangos B2:B10; C2:C10; D2:D10; E2:E10; F2:F10: ALEATORIO.ENTRE(0;15).
Estos rangos son a modo de ejemplo porque los originales son 196 rangos y más grandes, concatenados en una hoja con muchísimas fórmulas que tarda mucho en calcular y cada vez que se calcula la hoja solo se modifican 2 o3 rangos, lo que yo consigo con esta macro es optimizar el cálculo para que calcule solamente los rangos que sé con anticipación van a ser modificados, de esta manera va a calcular la hoja como mínimo 50 veces más rápido que si calculo la hoja entera.
Listo ya probé la macro con los datos suministrados y funciona de 10, espero que le sea útil, a continuación la macro:
Sub calcular()
Sheets("Hoja1").Range("A1").Select
Do While Not IsEmpty(ActiveCell)
repite:
If (ActiveCell.Value > 0) Then
ActiveCell.Offset(0, 1).Select
Else
    If (ActiveCell.Value = 0) Then
    For a = 1 To 10
        If (ActiveCell.Value > 0) Then
        GoTo repite
        Else
        b = ActiveCell.Address
        c = Mid(ActiveCell.Address, 2, 1)
        d = c & 10
        Range("b:d").Calculate
        End If
    Next a
    GoTo inicio
    End If
End If
Loop
Exit Sub
inicio:
    Sheets("Hoja1").Range("A1").Select
    Do While Not IsEmpty(ActiveCell)
repite1:
    If (ActiveCell.Value > 0) Then
        ActiveCell.Offset(0, 1).Select
        Else
            If (ActiveCell.Value = 0) Then
            For a = 1 To 30
                If (ActiveCell.Value > 0) Then
                GoTo repite1
                Else
                b = ActiveCell.Address
                c = Mid(ActiveCell.Address, 2, 1)
                d = c & 10
                Range("b:d").Calculate
                End If
            Next a
            End If
    End If
Loop
End Sub
Recuerde que cualquier consulta me la puede comunicar en mi perfil, si le ha sido de utilidad mi ayuda, NO OLVIDE PUNTUAR Y FINALIZAR LA PREGUNTA, de lo contrario no finalice esta consulta hasta obtener la solución adecuada, que tenga un feliz día!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas