в который раз уже я к вам за помощью, гуру..аж стыдно уже... дело такое: есть график примерно линейного вида. пользователь на юзер форуме выбирает точки на графике, кривая между которыми более всего напоминает ему прямую, и вводит в юзерформу эти точки. по этим точкам строится линия тренда - спасибо большое Слэн'у, это он подсказал. теперь задача такова - по построенному тренду сделать прогноз - т.е. пользователь построил тренд от 50 до 60 точки на графике (это по х), какими будут значения по у от 61,62 и далее точек. В хелпе экселя есть вот что:
Цитата
=СУММ(ЛИНЕЙН(B1:B6; A2:A7)*{9;1}) - Вычисляет предполагаемый объем продаж в девятом месяце на основе данных о продажах за 2–6 месяцы
по описанию - то, что доктор прописал. вопрос - как ее написать в вба?) имеется вот такой код:
Код
Private Sub GoButton_Click()
With Worksheets("123")
Call XarakCalc
Select Case True
Case Chart5_Select 'имеется серия графиков, пользователь выбирает, по какому конкретно он хочет получить прогноз
Dim trendline, x, y
N = TextBox9.Text: K = TextBox10.Text 'ввод границ прогноз - 50 и 60ая точка, к примеру
ReDim x(1 To K - N + 1): ReDim y(1 To K - N + 1)
j = 0
For i = N To K
j = j + 1
If Np_o(i) = Empty Then 'это массив объявляется в XarakCalc, в него заносятся значения ячеек из определнного столбца
y(j) = 0
Else
y(j) = Np_o(i)
End If
If ObrTime(i) = Empty Then 'это массив объявляется в XarakCalc, в него заносятся значения ячеек из определнного столбца
x(j) = 0
Else
x(j) = ObrTime(i)
End If
Next i
.Range("C7") = WorksheetFunction.Sum(WorksheetFunction.LinEst(y, x))
.....
End Sub
сам тренд строится в другой процедуре вот так:
Код
......
trendline = WorksheetFunction.LinEst(y, x, 1, 1) 'y, x вычисляются так же, как и в коде выше
ReDim x(1 To 2): ReDim Np_o(1 To 2)
x(1) = ObrTime(N)
x(2) = ObrTime(K)
Np_o(1) = trendline(1, 1) * x(1) + trendline(1, 2)
Np_o(2) = trendline(1, 1) * x(2) + trendline(1, 2)
' далее он добавляется на уже существующи график
.......
Dim knowny As Variant
Dim knownx As Variant
Dim newx()
ReDim newx(1 To Sr) 'кол-во точек прогноза, на сколько шаговон нужен
Dim myval As Variant
knowny = y()
knownx = x()
For i = 1 To Sr
newx(i) = 1 / (i + K) ' кривая несколько в извращенном виде)) К - правая границы выделенной области
Next i
myval = WorksheetFunction.Trend(knowny, knownx, newx, 1)
'заполнение ячеек созданным массивом:
Dim massiv()
massiv = myval
.Cells(7, 3).Resize(UBound(massiv), 1) = Application.Transpose(massiv)
если у кого-то есть мысли, как это сделать с линейн - будет здорово узнать)