7_RWE_Tablice i zakresy
Zakres komórek na arkuszu obiekt range
Własności (po kropce !!!)
Liczba wierszy Rows.Count
Liczba kolumn Columns.Count
Komórka arkusza Cells(w, k) (wiersz, kolumna w zakresie)
Tablice = deklaracja Dim(liczba elementow) as typ elementów
Tablica statyczna – liczba elementów stała, znana w momencie deklaracji
Przykłady
Dim wektor(2) as double
Standardowo ma 2 elementy: wektor(0) i wektor(1)
Po wprowadzeniu dyrektywy Option Base 1 ma 2 elementy: wektor(1) i wektor(2)
Dim wekt(1 to 3) as double ma 3 elementy: wekt(1),wekt(2),wekt(3)
Dim macierz(2,2) as double
Standardowo ma 4 elementy: macierz(0,0),macierz(0,1), macierz(1,0), macierz(1,1)
Po wprowadzeniu dyrektywy Option Base 1
macierz(1,1),macierz(1,1), macierz(2,1), macierz(2,2)
Tablica dynamiczna – liczba elementów nieznana lub zmienna określa ją instrukcja ReDim
Przykład
deklarcja tablicy dynamicznej Dim tab() as double
redefinicja wymiaru ReDim tab(1 to 5, 1 to 6)
PRZYKŁAD Algorytm Gaussa i rozwiązanie układu trójkątnego
Option Base 1 ‘ wymuszenie numeracji elementów tablic od 1
Option Explicit ‘ wymuszenie deklaracji wszystkich zmiennych
Function Gauss(tp As Range)
Dim u, m, w, k, i, u1 As Integer
Dim g, p, g1 As Double
Dim res() As Double 'tablica dynamiczna
u = tp.Rows.Count: m = tp.Columns.Count 'wymiary zakresu
ReDim res(u, m) 'dynamiczna rezerwacja
For w = 1 To u 'kopiowanie zakresu do tablicy
For k = 1 To m
res(w, k) = tp.Cells(w, k)
Next k
Next w
u1 = u - 1
For w = 1 To u1
g = res(w, w) 'element główny
If g < 0.0000001 Then Gauss= "zalezna niewiadoma " & w: GoTo KON
For i = w + 1 To u
p = res(i, w) / g
For k = 1 To m
res(i, k) = res(i, k) - res(w, k) * p: ' res(i, w) / res(w,w)
Next k
Next i
Next w
Gauss = res
KON:
End Function
Function zTrojkata(t As Range)
Dim w, k, i, j, i1 As Integer
Dim s As Double
Dim res() As Double
w = t.Rows.Count: k = t.Columns.Count ' wymiary
ReDim res(w) 'rezerwacja
For i = 1 To w
i1 = w + 1 - i
s = t.Cells(i1, k)
If i > 1 Then For j = i1 To w: s = s - t.Cells(i1, j) * res(j): Next
res(i1) = s / t.Cells(i1, i1)
Next i
zTrojkata = res
End Function