В процедуре ТрендсПовторениями() становится видимым поле Повторения, в которое нужно ввести ссылку на диапазон. Перед вычислением параметров тренда в процедуре находятся число повторений каждой наблюдаемой величины, общее число всех наблюдений. Результаты выводятся в диапазоны, сопряжённые с диапазоном, введённым в поле Повторения. Наблюдения преобразуются в таблицу из двух столбцов с учётом повторения наблюдений.
Sub ТрендсПовторениями()
Dim ИмяЛиста As String
Dim Ячейка As Object
Dim x(), y(), Nxy(), Nx(), Ny() As Double
Dim i, j, k, p, N_x, N_y, Nобщая As Integer
Независимая = RefEdit1.Value
Зависимая = RefEdit2.Value
Повторения = RefEdit3.Value
N_x = Range(Повторения).Rows.Count
N_y = Range(Повторения).Columns.Count
ReDim Nxy(1 To N_x, 1 To N_y), Nx(1 To N_x), Ny(1 To N_y), _
x(1 To N_x), y(1 To N_y)
For i = 1 To N_x
For j = 1 To N_y
Nxy(i, j) = Range(Повторения).Cells(i, j).Value
Next j
Next i
For i = 1 To N_x
Nx(i) = 0
For j = 1 To N_y
Nx(i) = Nx(i) + Nxy(i, j)
Next j
Range(Повторения).Cells(i, N_y).Select
Selection.Offset(0, 1).Value = Nx(i)
Next i
Nобщая = 0
For i = 1 To N_x
Nобщая = Nобщая + Nx(i)
Next i
For j = 1 To N_y
Ny(j) = 0
For i = 1 To N_x
Ny(j) = Ny(j) + Nxy(i, j)
Next i
Range(Повторения).Cells(N_x, j).Select
|
|
Selection.Offset(1, 0).Value = Ny(j)
Next j
Range(Повторения).Cells(N_x, N_y).Select
Selection.Offset(1, 1).Value = Nобщая
For i = 1 To N_x
x(i) = Range(Независимая).Cells(i).Value
Next i
For i = 1 To N_y
y(i) = Range(Зависимая).Cells(i).Value
Next i
p = 1
For i = 1 To N_x
For j = 1 To N_y
If Nxy(i, j) <> 0 Then
For k = 1 To Nxy(i, j)
Cells(p, 100).Value = x(i)
Cells(p, 101).Value = y(j)
p = p + 1
Next k
End If
Next j
Next i
Независимая = "R1C100:R" & CStr(p - 1) & "C100"
Зависимая = "R1C101:R" & CStr(p - 1) & "C101"
Cells(1, 102).FormulaLocal = _
"=ОТРЕЗОК(" & Зависимая & ";" & Независимая & ")"
Cells(2, 102).FormulaLocal = _
"=НАКЛОН(" & Зависимая & ";" & Независимая & ")"
Cells(3, 102).FormulaLocal = _
"=КОРРЕЛ(" & Зависимая & ";" & Независимая & ")"
b = Cells(1, 102).Value
m = Cells(2, 102).Value
Корреляция = Cells(3, 102).Value
TextBox1.Text = CStr(b)
TextBox2.Text = CStr(m)
TextBox3.Text = CStr(Корреляция)
Диаграмма Range(Cells(1, 100), Cells(p - 1, 101))
End Sub
Процедура Диаграмма() строит линию тренда и показывает исходные данные.