используя массив формул и тренд в Excel VBA - PullRequest
0 голосов
/ 21 февраля 2011

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

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

Worksheets("Summary").Range("M3").Resize(daycount, 1).FormulaArray = Application.WorksheetFunction.Trend(yvalues, xvalues)

Мой вывод находится в столбце M:

-64.1022
-64.1022
-64.1022
-64.1022
-64.1022

, когда должны быть разные значения.

Есть идеи, в чем проблема?Спасибо за помощь.

Ответы [ 3 ]

0 голосов
/ 22 февраля 2011

Возможно, что-то не так с диапазоном, получающим значение.Попробуйте присвоить его объекту диапазона, а затем примените саму формулу.

Оба диапазона Target / X / Y имеют одинаковый размер?Не уверен, сработают ли они, если нет.

Просто попробовал приведенный ниже код и работал нормально (т.е. целевой диапазон получил десятичные значения, как и ожидалось).

К вашему сведению, я установил диапазон A1: A5как [1 2 3 4 5] и B1: B5 как [100 10 5 2 1].

Sub TestTrend()

    Dim oRange As Excel.Range
    Dim oRangeX As Excel.Range
    Dim oRangeY As Excel.Range

    Set oRange = Worksheets("MySheet").Range("C1:C5")
    Set oRangeX = Worksheets("MySheet").Range("A1:A5")
    Set oRangeY = Worksheets("MySheet").Range("B1:B5")

    oRange.FormulaArray = Application.WorksheetFunction.Trend(oRangeX, oRangeY)

End Sub
0 голосов
/ 23 февраля 2011

Я понял это !!

Правильный вызов:

    ...=Array(Application.WorksheetFunction.Trend(yvalues, xvalues))

, тогда vba возвращает массив из функции, а не просто одно значение.

0 голосов
/ 21 февраля 2011

Вы вводите значения не по формуле; поэтому используйте «.Value» вместо «.FormulaArray».

Worksheets("Summary").Range("M3").Resize(daycount, 1).Value = Application.WorksheetFunction.Trend(yvalues, xvalues) 

EDIT:

Остерегайтесь димеризации массивов. Чтобы иметь возможность вставить массив непосредственно в диапазон, необходимо иметь размерность массива (от 1 до n, от 1 до 1). Функция рабочего листа TREND принимает в качестве аргументов один размерный массив (от 1 до n), а также 2-мерный массив (от 1 до n, от 1 до 1). Важно отметить, что массив, доставленный функцией TREND, будет иметь то же измерение, что и ваши yvalues ​​ и xvalues ​​ array.

Так почему это сработало:

...=Array(Application.WorksheetFunction.Trend(yvalues, xvalues)) 

Поскольку Application.WorksheetFunction.Trend(yvalues, xvalues) доставлял одномерный массив, а затем, когда передавал это в качестве аргумента функции Array (..), он превращался в двумерный массив.

...