2015-06-14 5 views
0

Я пытаюсь написать функцию в VBA, которая рассчитает стандартное отклонение и диапазон трех чисел. Если все числа определены как ---, то funtion должен выводить --- как ответ. Если ВСЕ 3 из них не являются --- тогда стандартное отклонение или диапазон следует рассчитывать с оставшимся числом, в то время как IGNORING --- ---. Цифры вводятся пользователем. Вот код, который я написал для расчета диапазона и стандартного отклонения. Используя встроенную функцию excel WS, которая уже игнорирует входные данные, если они не являются номерами, я смог обойти этот сложный бит. Однако, как видно, мне не удалось получить код для распознавания, когда все три --- для регистрации как ---.Код VBA для стандартного отклонения и диапазон

ФУНКЦИИ ДЛЯ ВЫЧИСЛЕНИЯ RANGE -------------------------------

Функция Диапазон (ParamArray ObservedValues ​​())

Хотя ObservedValues ​​(I) = "---" Range = "---" Венд

Max = Application.WorksheetFunction.Max(ObservedValues) 
    Min = Application.WorksheetFunction.Min(ObservedValues) 

    Range = Max - Min 

End Function


ФУНКЦИИ ДЛЯ ВЫЧИСЛЕНИЯ Волатильность (несколько попыток)

ПЕРВЫЙ ПОПЫТКА

Функция SD (ObservedValueA, ObservedValueB, ObservedValueC, ObservedMean)

Если ObservedValueA = "---" И ObservedValueB = " ---»И ObservedValueC = "---" Тогда SD = "---" End If

If ObservedValueA <> "---" Then 
    a = 1 
    x = ObservedValueA - ObservedMean 
     Else 
     a = 0 
     x = 1 
End If 

If ObservedValueB <> "---" Then 
    b = 1 
    y = ObservedValueB - ObservedMean 
     Else 
     b = 0 
     y = 1 
End If 

If ObservedValueC <> "---" Then 
    c = 1 
    Z = ObservedValueC - ObservedMean 
     Else 
     c = 0 
     Z = 1 
End If 

SD = Кв ((1/(A + B + C)) * х^2 * у^2 * Z^2)

End Function

ВТОРОЙ ПОПЫТКИ

Функция SD (ParamArray Number_Input())

Хотя Number_Input = "---" SD = "---" Венд SD = Application.WorksheetFunction.StDev (Number_Input)

End Function

ответ

0

Произнесите 3 значения для вычисления СКО в A1: A3

Function sd() 
    Dim Val As Variant 
    Val = [STDEV.S(IF(NOT(ISNA(A1:A3)),A1:A3))] 
    If IsError(Val) Then 
     sd = "---" 
    Else 
     sd = Val 
    End If 
End Function 
+0

Спасибо Edouard за вашу помощь. Однако это не полностью решает мою проблему, цифры, которые пользователь вводит, не всегда будут в последовательном порядке, как в A1: A3 часто, когда они будут случайными местами на листе, например G4, Y2 и J17. Этот расчет нужно будет делать много раз для меняющихся клеток. Вот почему я написал свой код, чтобы переменные определялись выбором ячейки. – Andrea

Смежные вопросы