Есть ли способ использовать 2-мерный массив в качестве аргумента Y в функциях FORECAST в Excel? - PullRequest
0 голосов
/ 17 мая 2019

Функции FORECAST в Excel принимают одномерный массив как для аргумента «известный X», так и для аргумента «известный Ys», а затем возвращают одно значение в качестве ответа.

Я бы хотел использовать двумерный массив для аргумента «известный Ys» и вернуть массив (1-мерный) в качестве ответа. Другими словами, я хочу вернуть набор (массив) прогнозов, которые соответствуют набору (массиву) Y-значений, охватывающих одну и ту же шкалу времени (X-значения). (Есть причина, по которой мне это нужно ... Мне нужно умножить полученный результат на пару других массивов.)

Но если я возьму формулу, которая отлично работает, как FORECAST.LINEAR($H$1,A2:G2,$A$1:$G$1) и затем измените 1-мерный массив на 2-мерный (G7 вместо G2): FORECAST.LINEAR($H$1,A2:G7,$A$1:$G$1) и нажмите Ctrl + Alt + Enter, я получаю сообщение об ошибке (# N / A). То же самое с функцией TREND.

Я знаю, что некоторым функциям Excel не нравится принимать массив в качестве аргумента - хотя иногда есть способы обойти это (например, здесь: Может ли функция INDEX Excel вернуть массив? ). Но я не могу понять, можно ли «разыменовать» вещи в моей ситуации ... Мне, конечно, не удалось внедрить этот подход здесь.

Добавление в ответ на комментарий: Представленные ниже данные являются репрезентативными (хотя реальные данные имеют намного больше строк и столбцов!). Верхняя строка представляет «известные X (это временная шкала), а последующие строки - данные. В результате я хочу получить массив, представляющий прогнозируемое значение Y, соответствующее X = 8 ... здесь, я думаю, это будет 11.71; 14.43; 177.71; 25.71; 16.71; 10.86;

enter image description here

1 Ответ

0 голосов
/ 20 мая 2019

Итак, вот попытка, я до сих пор не уверен, что вы ищете, но позвольте мне попробовать.

Я пошел по UDF-пути, и я предполагаю, что вы передаете функции диапазон, в котором столько строк, сколько столбцов.

Function GetResult(RNG1 As Range, RNG2 As Range) As Double

Dim X As Double, RNG3 As Range, ARR() As Variant
ReDim ARR(RNG2.Rows.Count - 1)
For X = 1 To RNG2.Rows.Count
    Set RNG3 = Application.Intersect(RNG2, Rows(X + 1))
    ARR(X - 1) = Application.WorksheetFunction.Forecast(RNG2.Columns.Count + 1, RNG3, RNG1)
Next X

GetResult = Application.WorksheetFunction.Forecast(RNG2.Columns.Count + 1, ARR, RNG1.Value)

End Function

На данных образца, которые вы предоставляете (с извлечением столбца 7), это будет выглядеть так:

enter image description here

Функция создаст прогноз для каждой строки и сохранит его в одномерном массиве. Затем он будет использовать все эти прогнозы для создания окончательного прогноза.

Это близко к тому, что вы ожидаете?

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