Foro de Ayuda Excel | ||
| Soluciona tus problemas con Excel |
|
#1
| |||
| |||
| Function Incremento(ByVal Cuota As Double, ByVal Inc As Integer) As Double If Inc > 0 Then If Cuota < 2 Then Incremento = Incremento(Cuota + 0.01, Inc - 1) ElseIf Cuota < 3 Then Incremento = Incremento(Cuota + 0.02, Inc - 1) ElseIf Cuota < 4 Then Incremento = Incremento(Cuota + 0.05, Inc - 1) ElseIf Cuota < 6 Then Incremento = Incremento(Cuota + 0.1, Inc - 1) ElseIf Cuota < 10 Then Incremento = Incremento(Cuota + 0.2, Inc - 1) ElseIf Cuota < 20 Then Incremento = Incremento(Cuota + 0.5, Inc - 1) ElseIf Cuota < 30 Then Incremento = Incremento(Cuota + 1, Inc - 1) ElseIf Cuota < 50 Then Incremento = Incremento(Cuota + 2, Inc - 1) ElseIf Cuota < 100 Then Incremento = Incremento(Cuota + 5, Inc - 1) ElseIf Cuota < 1000 Then Incremento = Incremento(Cuota + 10, Inc - 1) Else: Incremento = 1000 End If End If If Inc = 0 Then Incremento = Cuota End If End Function La funcion lo q hace es calcular el valor resultante de incrementar un valor pero teniendo en cuenta q el incremento es distinto según el tramo: De 1,01 a 2 incremento de 0,01 De 2 a 3 incremento de 0.02 De 3 a 4 incremento de 0.05 De 4 a 6 incremento de 0.1 De 6 a 10 incremento de 0.2 De 10 a 20 incremento de 0.5 De 20 a 30 incremento de 1 De 30 a 50 incremento de 2 De 50 a 100 incremento de 5 y de 100 a 1000 incremento de 10 en 10. P.ej.: Incremento(1,01;1) daría como resultado 1,02 ............. Incremento(1,01;98)= 1,99 Incremento(1,01;99) = 2 Incremento(1,01;100)= 2,02 ............. Incremento(1,01;148)= 2,98 Incremento(1,01;149)= 3 Incremento(1,01;150)= 3,05 ............... Incremento(1,01;168)= 3,95 Incremento(1,01;169)= 4 hasta aqui todo bien, pero resulta q si hago Incremento(1,01;170) da como resultado 4,05 en vez de dar 4,10 de hecho si hago Incremento(4;1)=4,10 o Incremento(3,95;2) = 4,10 Increible pero cierto!! Yo creo q es algo relativo a los tipos de datos pero ni idea, y cuanto más lo miro menos lo entiendo, si alguien lo ve, q me conteste. He realizado la ejecucion paso a paso y aun he flipado más cuando he visto q la variable Cuota segun el depurador tenía un valor = 4 y sin embargo entraba por la comparativa "menor que 4"; increible pero cierto. Perdonad por el tocho y gracias de antemano. |
|
#2
| ||||
| ||||
| hola eljuju: he estado revisando el código que has enviado y he visto que no tiene nada que ver con el tipo de variable que declaras. Es más bien un problema de validación, es decir, cuando Cuota es igual a 4 todavía no entra en el rango de <4 así que seguirá aumentando de 5 en 5. He encontrado una solución que, no sé si te valdrá. Fíjate en las condiciones: Código: Function Incremento(ByVal Cuota As Double, ByVal Inc As Integer) As Double If Inc > 0 Then If Cuota < 1.9999999 Then Incremento = Incremento(Cuota + 0.01, Inc - 1) ElseIf Cuota < 2.9999999 Then Incremento = Incremento(Cuota + 0.02, Inc - 1) ElseIf Cuota < 3.9999999 Then Incremento = Incremento(Cuota + 0.05, Inc - 1) ElseIf Cuota < 5.9999999 Then Incremento = Incremento(Cuota + 0.1, Inc - 1) ElseIf Cuota < 9.9999999 Then Incremento = Incremento(Cuota + 0.2, Inc - 1) ElseIf Cuota < 19.9999999 Then Incremento = Incremento(Cuota + 0.5, Inc - 1) ElseIf Cuota < 29.9999999 Then Incremento = Incremento(Cuota + 1, Inc - 1) ElseIf Cuota < 49.9999999 Then Incremento = Incremento(Cuota + 2, Inc - 1) ElseIf Cuota < 99.9999999 Then Incremento = Incremento(Cuota + 5, Inc - 1) ElseIf Cuota < 999.9999999 Then Incremento = Incremento(Cuota + 10, Inc - 1) Else: Incremento = 1000 End If End If If Inc = 0 Then Incremento = Cuota End If End Function Saludos. |
|
#3
| |||
| |||
| Mirando tu codigo se me hace que If...then..else.. no es la estructura apropiada y que mejor deberias utilzar un case de la siguiente forma: Select Case Variable Case Is < 5 Incremneto = ... Case Is < 6 Incremneto = ... Case Else Increment = 1000 End Select Una saludo... |
| Herramientas | |
| Desplegado | |
| |