Функция Excel, имитирующая среднеквадратичное вычисление, возвращает ошибку - PullRequest
0 голосов
/ 17 сентября 2018

Все, ниже приведен скрипт VBA для Excel, который я написал, чтобы попытаться вычислить среднеквадратичное значение в Excel. переменная avg является значением отдельной ячейки, setter является диапазоном. Это должно имитировать функцию среднеквадратичной ошибки. Он должен применяться на скользящей основе по всему листу, а не только над одним статическим набором данных, поэтому он должен быть UDF.

Для ясности, это возвращает ошибку #NAME?. Введена формула =runs_test(S86,T66:T86); все столбцы S и T являются формулами, которые возвращают числа.

Любой совет приветствуется, спасибо!

Function runs_test(avg As Double, setter As Range)
Option explicit

Dim i As Variant
Dim counter As Double
Dim er As Double


For Each i In setter

    er = (avg - i.Value) ^ 2
    counter = counter + er

Next i


total = setter.Cells.Count

er = counter / total
er = er ^ (1 / 2)

runs = er

End Function

1 Ответ

0 голосов
/ 17 сентября 2018

Несколько мелких опечаток и синтаксическая коррекция дают следующую рабочую функцию.

Option Explicit

Function runs_test(avg As Double, setter As Range)

    Dim i As Range
    Dim counter As Double, er As Double
    Dim total As Long


    For Each i In setter

        er = (avg - i.Value) ^ 2
        counter = counter + er

    Next i


    total = setter.Cells.Count

    er = counter / total
    er = er ^ (1 / 2)

    runs_test = er

End Function

Обратите внимание, что код функции входит в кодовую таблицу общедоступного модуля, а не в кодовую таблицу частного листа. Используйте Insert, Module в VBE, чтобы добавить кодовый лист общедоступного модуля в ваш проект.

enter image description here

...