Hejka...
Wszystko byłoby pięknie, tylko że to nie są dane które są na stałe wpisane... wyliczam je... Może wkleje kawałek kodu dla rozjaśnienia sytuacji z wykorzystaniem Twojej jakże cudownej średniej ruchomej ;)...
Sub srednia_ruchoma_wahania()
Dim zakresC As String
Dim tablicaY As Range
Dim Y As Variant, Y_sr As Variant, Y_YSr As Variant
Dim wA As Integer, kA As Integer, wC As Integer, kC As Integer
Dim i As Integer, j As Integer
On Error GoTo canceled
Set tablicaY = Application.InputBox( _
prompt:="Wskaż zakres tablica Y :", _
Title:="srednia ruchoma", _
Type:=8)
wA = tablicaY.Rows.Count: kA = tablicaY.Columns.Count
Label:
zakresC = Application.InputBox( _
"Wskaż pierwsza komorke tablicy wynikowej :", _
"srednia ruchoma", , , , , , 8).Address()
wC = Range(zakresC).Row: kC = Range(zakresC).Column - 1
If Range(zakresC).Row + tablicaY.Row > 65536 Or _
Range(zakresC).Column + tablicaY.Column > 256 Then
MsgBox "Tablica nie miesci sie we wskazanym zakresie!", , "Błąd"
GoTo Label
End If
On Error GoTo 0
For i = 1 To 7
With Cells(wC, kC + i)
.Font.Bold = True
.HorizontalAlignment = xlCenter
End With
Next i
Cells(wC, kC + 1).Value = "ŚrRuchoma"
Cells(wC, kC + 2).Value = "Wahania"
Cells(wC, kC + 3).Value = "(y-y^)^2"
Cells(wC, kC + 4).Value = "y-yŚr"
Cells(wC, kC + 5).Value = "Delta 1"
Cells(wC, kC + 6).Value = "Delta 2"
Cells(wC, kC + 7).Value = "korelacja"
ReDim wahania(wA, kA)
ReDim sr_ruchoma(wA, kA)
For i = 1 To wA - 2
For j = 1 To kA
sr_ruchoma(i, j) = WorksheetFunction.Average(tablicaY(i, j).Resize(3, 1))
Cells(wC + i + 2, kC + j).Value = sr_ruchoma(i, j)
wahania(i, j) = tablicaY(i + 2, j) - sr_ruchoma(i, j)
Cells(wC + i + 2, kC + j + 1).Value = wahania(i, j)
Next j
Next i
Y_sr = WorksheetFunction.Average(tablicaY)
Y = tablicaY
For i = 1 To wA
For j = 1 To kA
Y_YSr = Y(i, j) - Y_sr
Cells(wC + i, kC + j + 2).Value = (Y(i, j) - Y_sr) ^ 2
Cells(wC + i, kC + j + 3).Value = Y_YSr
Next j
Next i
ReDim delta_1(wA, kA)
For i = 1 To wA - 3
For j = 1 To kA
delta_1(i, j) = sr_ruchoma(i + 1, j) - sr_ruchoma(i, j)
Cells(wC + i + 3, kC + j + 4).Value = delta_1(i, j)
Next j
Next i
ReDim delta_2(wA, kA)
For i = 1 To wA - 4
For j = 1 To kA
delta_2(i, j) = delta_1(i + 1, j) - delta_1(i, j)
Cells(wC + i + 4, kC + j + 5).Value = delta_2(i, j)
Next j
Next i
ReDim korelacja(wA) 'I TU POJAWIA SIE PROBLEM
For i = 0 To wA / 2 - 1
korelacja(i) = WorksheetFunction.SumProduct( _
Range("C1:C" & 23 - i), Range("C" & 2 + i & ":C24"))
Cells(wC + i + 2, kC + 7).Value = korelacja(i)
Next i
Exit Sub
canceled:
MsgBox "Operacja została anulowana"
End Sub
i teraz dane ktore maja być przerobione przez tą nieszczęsną pętlę są wynikiem Y_YSr...
Wielkie dzieki za poświęcony czas...
Pozdrawiam |