в который раз уже я к вам за помощью, гуру..аж стыдно уже...
дело такое: есть график примерно линейного вида. пользователь на юзер форуме выбирает точки на графике, кривая между которыми более всего напоминает ему прямую, и вводит в юзерформу эти точки. по этим точкам строится линия тренда - спасибо большое Слэн'у, это он подсказал. теперь задача такова - по построенному тренду сделать прогноз - т.е. пользователь построил тренд от 50 до 60 точки на графике (это по х), какими будут значения по у от 61,62 и далее точек.
В хелпе экселя есть вот что:
по описанию - то, что доктор прописал. вопрос - как ее написать в вба?)
имеется вот такой код:
сам тренд строится в другой процедуре вот так:
попробовал банальщину:
но вместо RC мне туда надо вставить значения массивов x, y, да и 45 надо менять - т.е. в К5 вставили K-ое значение, в К6 K+1 и тд
нашел ф-ции =ПРЕДСКАЗ(41; F2:F41; G2:G41) и =ТЕНДЕНЦИЯ(F2:F41; G2:G41;41; 1), можно ли как-то вместо подсунуть массив х?
дело такое: есть график примерно линейного вида. пользователь на юзер форуме выбирает точки на графике, кривая между которыми более всего напоминает ему прямую, и вводит в юзерформу эти точки. по этим точкам строится линия тренда - спасибо большое Слэн'у, это он подсказал. теперь задача такова - по построенному тренду сделать прогноз - т.е. пользователь построил тренд от 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) ' далее он добавляется на уже существующи график ....... |
попробовал банальщину:
| Код |
|---|
Range("K5").FormulaR1C1 = "=SUM(LINEST(R[-3]C[-4]:R[36]C[-4], R[-3]C[-5]:R[36]C[-5])*{45,1})" |
но вместо RC мне туда надо вставить значения массивов x, y, да и 45 надо менять - т.е. в К5 вставили K-ое значение, в К6 K+1 и тд
нашел ф-ции =ПРЕДСКАЗ(41; F2:F41; G2:G41) и =ТЕНДЕНЦИЯ(F2:F41; G2:G41;41; 1), можно ли как-то вместо подсунуть массив х?
Изменено: - 04.05.2013 18:37:28