vbamania.pl
login:
hasło:
 
  *Rejestracja *Zapomniane hasło
 Dziś jest sobota, 18 maja 2024 roku.
Ustaw jako stronę startową Ulubione Napisz
PowrótPowrót do serwisu  RegulaminRegulamin rssRSS

  tytuł wątku:
Wątki dyskusji

Jak to zapiąć w pętlę?


otwartyotwarty rozpoczął: abuk postów: 5



napisał: abuk
postów: 20


umieszczony:
10 kwietnia 2006
01:08

  
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
napisał: Rycho
postów: 291


umieszczony:
9 kwietnia 2006
00:54

  
Witaj ponownie.
Jeśli dobrze zrozumialem, to chyba można zrobić tak:

Sub test()
  Dim T(11) As Double
  Dim i As Integer
  
  For i = 0 To 11
    T(i) = WorksheetFunction.SumProduct( _
      Range("C1:C" & 23 - i), Range("C" & 2 + i & ":C24"))
  Next i
End Sub



Pozdrawiam
Rycho
napisał: abuk
postów: 20


umieszczony:
8 kwietnia 2006
21:37

  
hehe :) generalnie robie program do badania liniowego modelu tendencji rozwojowej z wahaniami sezonowymi... i teraz chodzi o to, że programik pobiera tablice jednowymiarową.... w przykładzie, na którym sie opieram ma ona wymiar (24,1) ale to oczywiście będzie zależało od danych wejściowych... i musze ją przpuścić wydaje mi się że przez jakąś pętlę, która wykona mi działanie, o którym pisałem wczesśniej... a wynikiem ma być druga tablica czyli w tym przypadku (12, 1)... Mam nadzieję, że tym razem wyraziłem się jaśniej :)
pozdrawiam i dzieki za zainteresowanie...
napisał: Rycho
postów: 291


umieszczony:
8 kwietnia 2006
20:36

  
wow ;)
Ale jaki ma być efekt?

1. Formuły wpisane do komórek arkusza?
2. Wyniki wg algorytmu jak w formułach zapisane do tablicy?

Czy jeszcze coś innego?
Rycho
napisał: abuk
postów: 20


umieszczony:
8 kwietnia 2006
18:25

  
Witam ponownie...
Kolejny problem. Musze zrobić coś takiego:

=SUMA(C$1:C23*C2:C$24)
=SUMA(C$1:C22*C3:C$24)
=SUMA(C$1:C21*C4:C$24)
=SUMA(C$1:C20*C5:C$24)
=SUMA(C$1:C19*C6:C$24)
=SUMA(C$1:C18*C7:C$24)
=SUMA(C$1:C17*C8:C$24)
=SUMA(C$1:C16*C9:C$24)
=SUMA(C$1:C15*C10:C$24)
=SUMA(C$1:C14*C11:C$24)
=SUMA(C$1:C13*C12:C$24)
=SUMA(C$1:C12*C13:C$24)

Próbowałem na różne sposoby ale nic z nich nie wynika...
Za wszelkie sugestie będę bardzo wdzięczny...
Pozdrawiam


<-wstecz  1  dalej->
wszystkich stron: 1


Sortuj posty: z