Расчет стандартной ошибки Vba

Я пытаюсь добавить стандартную функцию ошибок в excel с помощью 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

person Trevor Caldwell    schedule 26.08.2015    source источник
comment
Не работает потому что? Вы получаете сообщение об ошибке или оно не дает правильного значения, что происходит?   -  person David G    schedule 26.08.2015
comment
Когда я пытаюсь использовать функцию в электронной таблице Excel, она отображается как 0 независимо от набора данных. Извините, что не разъяснил.   -  person Trevor Caldwell    schedule 26.08.2015
comment
Есть ли причина, по которой вы не используете функцию рабочего листа для стандартного отклонения?   -  person John Coleman    schedule 26.08.2015
comment
Я пытаюсь рассчитать стандартную ошибку, которую можно выполнить с помощью существующих функций рабочего листа, но нельзя сделать только с помощью одной функции.   -  person Trevor Caldwell    schedule 26.08.2015
comment
Но числитель может вычисляться таким образом. Кроме того, вы уверены, что хотите использовать размер населения в расчете стандартного отклонения, а не размер населения - 1?   -  person John Coleman    schedule 26.08.2015


Ответы (3)


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

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

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, чтобы избежать подобных глупых орфографических ошибок.

person Code Different    schedule 26.08.2015
comment
Спасибо! После того, как я исправил опечатку, расчет был выключен, но теперь он работает! - person Trevor Caldwell; 26.08.2015

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

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

person Excel Hero    schedule 26.08.2015

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

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

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

person John Coleman    schedule 26.08.2015