Retroceder   Foro Ayuda Excel > Dudas y consultas sobre Excel > Macros y programación VBA
Registrarse Preguntas Frecuentes Lista de Foreros Calendario Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
LinkBack Herramientas Desplegado
  #1  
Antiguo 13/05/08, 01:25:47
Principiante
 
Usuario desde: may 2008
Versión de Excel: Excel 2003
Conectado desde: España
Mensajes: 1
Predeterminado ¿Donde está el error?

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.
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Responder Con Cita
  #2  
Antiguo 13/05/08, 19:46:16
Avatar de proper
Gran participante
 
Usuario desde: may 2008
Versión de Excel: Excel 2007
Conectado desde: España
Mensajes: 436
Predeterminado

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
Este código funciona perfectamente para todos los valores. Si no es lo que buscas, vuelve a hacer la consulta y lo miramos más minuciosamente.


Saludos.
__________________
Si crees que lo sabes todo sobre Excel, te equivocas.
Ayuda Excel
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Responder Con Cita
  #3  
Antiguo 25/06/08, 01:52:01
Moderator
 
Usuario desde: jun 2008
Versión de Excel: Excel 2003
Conectado desde: Colombia
Mensajes: 61
Contactar con Efasor a través de MSN
Predeterminado Otra alternativa

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...
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Responder Con Cita
Respuesta


Herramientas
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Trackbacks are habilitado
Pingbacks are habilitado
Refbacks are habilitado



La franja horaria es GMT +2. Ahora son las 01:14:55.


© Ayuda Excel

Search Engine Friendly URLs by vBSEO 3.1.0 ©2007, Crawlability, Inc.

1 2 3 4 5 6 7