Проблема с основной функцией Excel / VBA - PullRequest
1 голос
/ 22 октября 2010

Я знаю, что это полный вопрос, но может кто-нибудь сказать мне, почему эта функция всегда возвращает 0:

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

Каждый раз, когда я вызываю ее в электронной таблице, она всегда возвращает 0. Например, Cd (5000) = 0, когда должно быть 0,44.Заранее спасибо за помощь.

Ответы [ 3 ]

5 голосов
/ 22 октября 2010
Case Re < 1

Это не хорошо.Вы оцениваете Re в вашем Select Case, и теперь вы сравниваете Re с Re < 1.Очевидно, вы хотели

Case Is < 1

Case 1 < Re < 1000 

Это тоже не хорошо.В VB нет оператора < X <.Это выражение оценивается как (1 < (Re < 1000)), что по существу становится либо 1 < False, либо 1 < True, что всегда равно False.Что вы хотели написать здесь:

Case 1 to 1000

Case 1000 < Re

Та же проблема снова.Вы, очевидно, имели в виду:

Case Is > 1000
4 голосов
/ 22 октября 2010

В дополнение к тому, что упоминает GSerg, я думаю, вам также следует явно привести функцию к возврату double.

Я только что проверил, что это работает, как вы ожидаете:

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 голосов
/ 06 ноября 2010

Одно простое изменение (кроме «

Select Case True
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...