Programování funkcí v Excelu (pole)
EXCEL : pole Pole – proměnná obsahující několik složek – několik paměťových míst označených stejným jménem, ale lišících se hodnotou indexu – vektor, matice, tabulka, … – pole má několik variant (obsah této prezentace) Deklarace: Dim Pole(DolMez To HorMez) As Typ Pole Pole(DolMez) Pole(HorMez) Odkaz na složku: Pole(I)
EXCEL : pole Příklad: Průměr z čísel 1, 2, 3. Function PRUM() As Double Dim A(1 To 3) As Integer ´ Deklarace pole Dim I As Integer ´ Index Dim S As Integer ´ Sčítač For I=1 To 3 ´ Načtení pole A(I)=I Next I S=0 ´ Počáteční hodnota S For I=1 To 3 ´ Součet prvků pole S=S+A(I) PRUM=S/3 ´ Průměr End Function Pomocí pole II Function PRUM() As Double Dim A1 As Integer Dim A2 As Integer Dim A3 As Integer A1=1 A2=2 A3=3 PRUM=(A1+A2+A3)/3 End Function Bez pole Function PRUM() As Double Dim A(1 To 3) As Integer A(1)=1 A(2)=2 A(3)=3 PRUM=(A(1)+A(2)+A(3))/3 End Function Pomocí pole I Pole lze při průchodu kombinovat s cykly.
EXCEL : statické pole Uvedené pole je statické – deklarací se určí počet složek, který se pak nemění Typ složek pole nemusí být uveden (pak je Variant) Stačí uvést HorMez (DolMez je pak 0) Následující příklady popisují stejná (nebo skoro stejná) pole Dim Pole(0 To 6) As Single Dim Pole(6) As Single Dim Pole(6)
EXCEL : dynamické pole Při deklaraci se neurčuje počet složek (úspora paměti) Dim Pole() As Type Dim Pole() Dim Pole Počet složek se určí až v průběhu programu příkazem ReDim Při dalším použití ReDim jsou hodnoty pole vymazány Změnu velikosti bez vymazaní provede ReDim Preserve ReDim Pole(DolMez To HorMez) ReDim Preserve Pole(DolMez To HorMez) ReDim Pole(DolMez To HorMez) As Type (pro Dim Pole)
EXCEL : pole Příklad: Průměr z čísel 1, 2, 3 a pak z 1, 2, 3, 4, 5. Function PRUM() As Double Dim A() As Integer ´ Deklarace pole Dim I As Integer Dim S As Integer ReDim A(1 To 3) ´ Určení velikosti For I=1 To 3: A(I)=I: Next I S=0 For I=1 To 3: S=S+A(I): Next I PRUM=S/3 ReDim Preserve A(1 To 5) ´ Změna velikosti For I=4 To 5: A(I)=I: Next I For I=4 To 5: S=S+A(I): Next I PRUM=S/5 End Function
EXCEL : příklad na pole Příklad: Sestavte funkci, která odevzdá součet prvků posloupnosti počínaje prvním prvkem a konče prvkem s největší hodnotou, maximálně však pro 100 prvků. Posloupnost je určena předpisem: ai = k exp(-(i-m)2/q), i=1,2,… Konstanty zvolte například: k=10, m=6, q=32 posloupnost vytvoříme v poli A(1 To 100) As Double v posloupnosti najdeme největší prvek a jeho index provedeme požadovaný součet
EXCEL : příklad na pole Function SouPosl(K As Double,M As Double,Q As Double) As Double Dim A(1 To 100) As Double 'Deklarace Dim I As Integer Dim S As Double Dim AMAX As Double Dim IMAX As Double For I=1 To 100: A(I)=K*EXP(-(I-M)^2/Q): Next I 'Vytvoření pole AMAX=A(1): IMAX=1 'Hledání nejv. hodnoty For I=2 To 100 If A(I)>AMAX Then AMAX=A(I): IMAX=I Next I S=0 'Sčítání For I=1 To IMAX: S=S+A(I): Next I SouPosl = S End Function
EXCEL : pole jako vstup funkce Pole vstupuje do funkce jako proměnná typu Variant V Excelovském sešitu ji reprezentuje výběr souvislé oblasti Function PRUM(A) As Double PRUM = (A(1) + A(2) + A(3)) / 3 End Function
EXCEL : pole jako výstup funkce Pole vystupuje jako dynamické pole nebo jako Variant Vznikne maticová funkce (potvrzuje se Ctrl+Shift+Enter) Jednodimenzionální pole vystupuje jako ”řádek” Function ABC( vstupni_prom) As Type() Dim Pole(Meze) As Type ’Naplnění pole … ABC = Pole End Function
EXCEL : pole jako výstup funkce Function ABC() As Integer() Dim Pole(1 To 3) As Integer 'Naplneni pole Pole(1)=1: Pole(2)=2: Pole(3)=3 ABC = Pole End Function Function ABC() Dim Pole(1 To 3) As Integer 'Naplneni pole Pole(1)=1: Pole(2)=2: Pole(3)=3 ABC = Pole End Function
EXCEL : vícedimenzionální pole Matice, Tabulka, … Popisuje se více indexovými rozsahy a více indexy Počet dimenzí maximálně 60 Deklarace: Dim Pole2(DolMez1 To HorMez1,DolMez2 To HorMez2) As Type Odkaz na složku: Pole2(I,J) Pole2
EXCEL : příklad na pole Příklad: Sestavte funkci, která přečte tabulku čísel z Excelu. Poté najde minimální prvek a předá tabulku obsahující odchylky prvků od minimálního prvku. První dva vstupní parametry určí počet řádků M a sloupců N Vstupní tabulka bude pole zadané jako Variant Výstupní hodnota bude opět Variant Budeme předpokládat, že M10, N10
EXCEL : příklad na pole Function Odchylky(M As Integer,N As Integer,A As Variant) Dim B(1 To 10,1 To 10) As Double 'Deklarace Dim I As Integer Dim J As Integer Dim AMIN As Double AMIN=A(1,1) 'Určení minima For I=1 To M For J=1 To N If A(I,J)<AMIN Then AMIN=A(I,J) Next J Next I For I=1 To M 'Určení odchylek B(I,J) = A(I,J)-AMIN Odchylky = B End Function