2010-10-21 9 views
1

Je sais que c'est une question totale noob, mais quelqu'un peut-il me dire pourquoi cette fonction retourne toujours 0:Excel/VBA Problème de base Fonction

Function Cd(Re As Double) 

Select Case Re 

    Case Re < 1 
     Cd = 24/Re 
    Case 1 < Re < 1000 
     Cd = 18 * Re^(-0.6) 
    Case 1000 < Re 
     Cd = 0.44 

End Select 

End Function 

Chaque fois que je l'appelle dans la feuille de calcul, il retourne toujours 0. Par exemple Cd (5000) = 0, alors qu'il devrait être 0.44. Merci d'avance pour l'aide.

Répondre

5
Case Re < 1 

Ce n'est pas bon. Vous évaluez Re dans votre Select Case en premier lieu, et maintenant vous comparez Re à Re < 1. De toute évidence, vous vouliez

Case Is < 1 

Case 1 < Re < 1000 

Ce n'est pas bon non plus. Il n'y a pas d'opérateur < X < dans VB. Cette expression est évaluée à (1 < (Re < 1000)), qui devient essentiellement 1 < False ou 1 < True, qui est toujours False. Qu'est-ce que vous vouliez écrire ici est:

Case 1 to 1000 

Case 1000 < Re 

Même problème nouveau. Vous évidemment voulu dire:

Case Is > 1000 
+0

+1 pour une explication très approfondie en vitesse record ;-) – bernie

+0

Merci beaucoup! – Brian

+1

Hey Brian, si cette réponse est correcte, n'oubliez pas d'appuyer sur la coche à gauche de la réponse. – Ommit

4

En plus des choses GSerg mentionne Je pense que vous devriez aussi jeter explicitement la fonction de renvoyer un double.

Je viens de tester que cela fonctionne comme prévu:

Function Cd(Re As Double) As Double 

    Select Case Re 

    Case Is < 1 
     Cd = 24/Re 
    Case 1 To 1000 
     Cd = 18 * Re^(-0.6) 
    Case Is > 1000 
     Cd = 0.44 

    End Select 

End Function 
0

Un simple changement (autre que le '< x <'). Faites-le

Select Case True