napisał: abuk postów: 20
umieszczony: 5 kwietnia 2006 17:18
|
|
Witam witam i bardzo dziekuje za pomoc...
Cytat:Typ każdej zmiennej musi być zadeklarowany odrębnie
tego nie wiedzialem... wyczytalem gdzies, ze mozna deklarowac j, i as... z reDim probowalem ale cosik nie wychodzilo, Cells(i, j).Resize(3, 1) takiej metody rowniez nie znalem...
raz jeszcze dzieki...
pozdrawiam i wracam do vba... :) |
|
napisał: Rycho postów: 291
umieszczony: 5 kwietnia 2006 01:13
|
|
Errata
Sorry, znowu się pośpieszyłem z wysłaniem, zamiast do końca makro przetestować.
Funkcja licząca średnią powinna wyglądać tak:
WorksheetFunction.Average(tablicaA(i, j).Resize(3, 1))
Rycho |
|
napisał: Rycho postów: 291
umieszczony: 5 kwietnia 2006 01:04
|
|
Witaj.
Na początek kilka uwag.
Typ każdej zmiennej musi być zadeklarowany odrębnie.
Dim i,j as integer oznacza, że i jest typu domyślnego czyli variant.
Metoda InputBox może zwrócić obiekt typu range.
Dlaczego w pęlach zmienna j jest do kA-2 a nie zmienna i do wA-2 ?
Nie ma delaracji rozmiarów tablicy "srednia".
Dim srednia() as variant
...
reDim srednia( ? , ? )
Właściwie można obyć się bez tablic operując wyłącznie na komórkach.
Twój program po zmianach może wygladać tak:
Sub srednia_ruchoma()
Dim zakresC As String
Dim tablicaA As Range
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 tablicaA = Application.InputBox( _
prompt:="Wskaż zakres tablicy A :", _
Title:="srednia ruchoma", _
Type:=8)
wA = tablicaA.Rows.Count: kA = tablicaA.Columns.Count
Label:
zakresC = Application.InputBox( _
"Wskaż pierwsza komorke tablicy wynikowej :", _
"srednia ruchoma", , , , , , 8).Address()
wC = Range(zakresC).Row - 1: kC = Range(zakresC).Column - 1
If Range(zakresC).Row + tablicaA.Row > 65536 Or _
Range(zakresC).Column + tablicaA.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 wA - 2
For j = 1 To kA
Cells(wC + i, kC + j).Value = _
WorksheetFunction.Average(Cells(i, j).Resize(3, 1))
Next j
Next i
Exit Sub
canceled:
MsgBox "Operacja została anulowana"
End Sub
Rycho
PS W edytorze otwórz okno zmiennych lokalnych (Locals Window) i obserwuj działanie makra krok po kroku (F8). |
|
napisał: abuk postów: 20
umieszczony: 4 kwietnia 2006 23:01
|
|
doszedlem do czegos takiego.... Sub srednia_ruchoma()
Dim zakresA, zakresC As String
Dim tablicaA As Range
Dim wynik As Variant
Dim srednia
Dim wA, kA, wC, kC, i, j As Integer
'On Error GoTo Label2
Label1:
zakresA = Application.InputBox("Wskaż zakres tablicy A :", "srednia ruchoma", , , , , , 8).Address()
Set tablicaA = Range(zakresA)
wA = tablicaA.Rows.Count: kA = tablicaA.Columns.Count
Label: zakresC = Application.InputBox("Wskaż pierwsza komorke tablicy wynikowej :", "srednia ruchoma", , , , , , 8).Address()
wC = Range(zakresC).Row - 1: kC = Range(zakresC).Column - 1
If Range(zakresC).Row + tablicaA.Row > 65536 Or Range(zakresC).Column + tablicaA.Column > 256 Then
MsgBox "Tablica nie miesci sie we wskazanym zakresie!", , "Błąd"
GoTo Label
End If
wynik = tablicaA
For i = 1 To wA
For j = 1 To kA - 2
srednia(i, j) = WorksheetFunction.Average(wynik(i, kA + 2))
Next j
Next i
For i = 1 To wA
For j = 1 To kA
Cells(wC + i, kC + j).Value = srednia(i, j)
Next j
Next i
'Exit Sub
'Label2: MsgBox "Klilnąłeś 'Anuluj'"
End Sub ale wiesza sie na srednia(i, j) wyskakuje "type mismatch....
ma ktos moze pomysl???
pozdrawiam... |
|
napisał: abuk postów: 20
umieszczony: 4 kwietnia 2006 13:37
|
|
Witam!
Probuje napisac makro ktore bedzie mi liczylo srednia ruchoma... Ma to sie odbywac w nastepujacy sposob... Uzytkownik uruchamia makro ktore prosi o zaznaczenie obszaru oraz pierwszej komorki tablicy wynikowej... zaznacza zakres np. A1:A24 i B1... Chodzi o to aby wypisac w B1, B2 itd. wynik dzialania B1=srednia(A1:A3), B2=srednia(A2:A4), B3=srednia(A3:A5)... domyslam sie zewynik = WorksheetFunction.Average(?????) wynik trzeba wpuscic w petle... to nie jest problem... tylko jak poruszac sie po adresach? A1:A3, A2:A4... czy wynik zapisac najpierw do tablicy i po nim sie poruszac?
Pozdrawiam... |
|
wstecz 1 dalej wszystkich stron: 1
|
|