Excel - Problema con recursividad del IF

 
Vista:
sin imagen de perfil

Problema con recursividad del IF

Publicado por Francisco (7 intervenciones) el 13/12/2021 14:15:23
Hola, tengo este código pero parece que el if esta mal planteado ya que solo se ejecuta una vez y no sigue con recursividad, pasa de inmediato al End If. Se supone que las variables "a" y "b" se retroalimentan. Primero "b" funciona con "a" como input, y luego "a" cambia en función de "b". El primer valor de "b" me da 116 chequeado en pantalla así que no se que puede estar fallando.

Sub borrador()
Dim a As Integer
a = 2
Dim b As Integer
b = 0
Range("E733").Value = 1
If b < 733 Then
Range("T3").FormulaR1C1 = "=MATCH(1,R" & a & "C5:R733C5,0) + 1"
b = Range("T3")
Range("D" & a & "") = "=IF(R" & a & "C3,SUM(R" & a & "C3:R" & b & "C3)/COUNTIF(R" & a & "C3:R" & b & "C3,""<>0""),R" & a & "C3)"
Range("D" & a & "").Select
Selection.AutoFill Destination:=Range("D" & a & ":D" & b & ""), Type:=xlFillDefault
a = b + 1
End If
End Sub
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Antoni Masana
Val: 4.908
Oro
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Problema con recursividad del IF

Publicado por Antoni Masana (2481 intervenciones) el 13/12/2021 16:51:25
En primer lugar el IF no es recursivo. Recursivo es una función Function o un procedimiento Sub .

Como no se que quieres hacer no te puedo decir porque no funciona lo que quieres hacer, lo que si te puedo decir es que la macro funciona perfectamente pero no tiene mucho sentido la condición del IF , ya que por el IF se pasa UNA SOLA VEZ y mirar si la variable es menor de un determinado número cuando justo antes de se la pone a CERO no tiene sentido porque la condición siempre se cumple.

Y ¿como se supone que se retroalimentan las variables? y ¿donde esta la recursividad ?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
Sub borrador()
    Dim a As Integer, b As Integer
    a = 2
    b = 0
    Range("E733").Value = 1
    If b < 733 Then
        Range("T3").FormulaR1C1 = "=MATCH(1,R" & a & "C5:R733C5,0) + 1"
        b = Range("T3")
        Range("D" & a & "") = "=IF(R" & a & "C3,SUM(R" & a & "C3:R" & b & "C3)/COUNTIF(R" & a & "C3:R" & b & "C3,""<>0""),R" & a & "C3)"
        Range("D" & a & "").Select
        Selection.AutoFill Destination:=Range("D" & a & ":D" & b & ""), Type:=xlFillDefault
        a = b + 1
    End If
End Sub

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Problema con recursividad del IF

Publicado por Francisco (7 intervenciones) el 13/12/2021 18:40:24
Efectivamente, mi error estaba en usar el If para buscar la recursividad. Ya lo solucioné. Te dejo el código por si te interesa lo que quería hacer.
Sub SegundaMacro()
'definicion de rangos
Dim a As Integer
a = 2
Dim b As Integer
b = 0
Dim d As Integer
d = 0
Range("E733").Value = 1
Do While d < 733
Range("S3").FormulaR1C1 = "=MATCH(1,R" & a & "C5:R733C5,0) + 1"
b = Range("S3")
d = a + b - 2
Range("D" & a & "") = "=IFERROR(IF(R" & a & "C3=0,SUM(R" & a & "C3:R" & d & "C3)/COUNTIF(R" & a & "C3:R" & d & "C3,""<>0""),R" & a & "C3),"""")"
Range("D" & a & "").Select
Selection.AutoFill Destination:=Range("D" & a & ":D" & d & ""), Type:=xlFillDefault
a = d + 1
Loop
End Sub
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar