2015-08-26 6 views
3

Я пытаюсь добавить стандартную функцию ошибки в excel с помощью VBA, что я до сих пор является лишь вариантом стандартной функции отклонения. Я получил функцию онлайн и изменил ее, поэтому в последней строке она делится на квадратный корень из всех точек данных. Кажется, это не работает для меня.Расчет стандартной ошибки Vba

Редактировать: Когда я пытаюсь использовать эту функцию в электронной таблице Excel, она появляется как 0 независимо от того, что такое набор данных.

Function StdErr(numbers As Range) As Double 
    Dim i As Integer 
    Dim xbar As Double 
    Dim x As Double 
    xbar = WorksheetFunction.Average(numbers) 
    For i = 1 To numbers.Count 
     x = x + (numbers.Item(i).Value - xbar)^2 
    Next i 
    SrdErr = (x/numbers.Count)/(Sqr(numbers.Count)) 
End Function 
+0

Это не работает, потому что? Получаете ли вы ошибку или не получаете правильное значение, что происходит? –

+0

Когда я пытаюсь использовать эту функцию в электронной таблице Excel, она появляется как 0 независимо от того, что такое набор данных. Извините, что не уточнил. –

+0

Есть ли причина, по которой вы не используете функцию рабочего листа для стандартного отклонения? –

ответ

3

Пара проблем с вашим кодом: (1) последнее заявление ошибочно называет имя функции SrdErr вместо StdErr. Вот почему вы получаете 0. (2) Само определение функции неверно, согласно Microsoft documentation.

Попробуйте это:

Option Explicit 

Function StdErr(numbers As Range) As Double 
    Dim StdDev As Double 
    Dim Size As Integer 

    StdDev = WorksheetFunction.StDev_S(numbers) 
    Size = WorksheetFunction.Count(numbers) 

    StdErr = StdDev/Sqr(Size) 
End Function 

Это хорошая идея, чтобы включить Option Explicit так что вы можете избежать глупых ошибок правописания, как это.

+0

Спасибо! После того, как я исправил опечатку, расчет был выключен, но теперь он работает! –

2

Причина, по которой вы получаете ноль, связана с опечаткой.

SrdErr = в конце должно быть StdErr =.

2

Вы можете сделать это довольно прямо:

Function StdErr(numbers As Range) As Double 
    StdErr = Application.WorksheetFunction.StDev_S(numbers)/(Sqr(numbers.Count)) 
End Function 

формулу, которую, казалось, имеют как неправильный знаменатель и отсутствующий квадратный корень в более-все числителе, по крайней мере, вы пытаетесь сделать this formula